You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Rails中如何将Devise当前用户用户名设为评论的commenter属性?

关于Rails评论模型赋值commenter的最佳实践

嘿,作为Rails新手能琢磨模型和控制器的职责划分,真的很赞!你的思路完全正确——在控制器的create方法里给commenter赋值是非常合适的做法,这也贴合Rails的设计原则。

为什么选控制器而不是模型?

因为current_user是请求上下文里的对象,属于控制器层面的东西,模型应该保持独立,不依赖请求相关的细节。这样不仅让模型更易测试(测试时不用模拟请求环境),还能避免用户通过表单提交篡改commenter的值,安全性更高。

修正后的代码示例

你原来的代码顺序有点小问题(先赋值再创建评论对象会报错),调整后的正确写法如下:

def create
  @post = Post.find(params[:post_id])
  # 先基于文章构建评论对象,再赋值commenter
  @comment = @post.comments.build(comment_params)
  @comment.commenter = current_user.username
  
  if @comment.save
    redirect_to @post, notice: "评论发表成功!"
  else
    # 保存失败时回到文章页显示错误
    render 'posts/show'
  end
end

private
def comment_params
  # 只允许用户提交评论内容,commenter由我们手动赋值,禁止前端修改
  params.require(:comment).permit(:content) # 假设你的评论有content字段
end

额外小提示

如果以后你想让评论关联到用户(而不是只存用户名快照),可以给Comment模型加user_id外键,然后直接赋值@comment.user = current_user,这时候控制器依然是处理这个赋值的最佳位置,模型只负责维护关联关系即可。

内容的提问来源于stack exchange,提问作者ezweizig

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.26 07:03:15