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
相关产品推荐
相关产品推荐

