由于我在轨道上的ruby中有新功能,我对在用户帖子下发表用户评论的语法感到困惑,这些关联是:
class User < ActiveRecord::Base
has_many :comments
has_many :posts
end
class Post < ActiveRecord::Base
has_many :comments
belongs_to :user
end
class Comments < ActiveRecord::Base
belongs_to :post
belongs_to :user
end
我可以使用@post = current_user.posts.build(postparams)
我的评论数据库中已有一个user_id。现在我对如何发表评论belongs_to用户感到困惑,所以这就是comments_controller
def create
@comment = @post.comments.create(comment_params)
redirect_to post_path(@post)
end
如果我运行上面的代码,它会在帖子下发表评论,但它不属于用户。
答案 0 :(得分:1)
如果你的架构是正确的,这应该在你的comments_controller中起作用:
def comment_params
params.require(:comment).permit(:name, :body)
.merge(user_id: current_user.id)
end
只需在评论参数中合并当前用户ID,您就不需要将表单中的user_id破解为隐藏字段。这可能是一个潜在的安全问题。
答案 1 :(得分:0)
你的评论是什么?您可以使用当前用户的值为名为user_id的评论表单添加一个字段。
其他选项:
确保评论由当前用户编写的另一种方法是在评论新的后添加用户。
def create
@comment = @post.comments.new(comment_params)
@comment.user = your_current_user
@comment.save
redirect_to_post_path(@post)
end