在Rails中实现用户注释

时间:2015-07-11 08:40:56

标签: ruby-on-rails ruby-on-rails-4

由于我在轨道上的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

如果我运行上面的代码,它会在帖子下发表评论,但它不属于用户。

2 个答案:

答案 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