我是Ruby on Rails的新手。我已经设置了一个基本的用户/帖子模型,允许用户创建帖子。我正在尝试为帖子创建评论,这也会将评论与创建评论的用户联系起来。
我已经设置了关系,以便用户拥有许多帖子和评论,帖子属于用户并且有很多评论,评论属于帖子和用户。
我在试图保存评论时出现问题。在我的评论控制器中:
def create
@comment = current_user.comments.build(params[:comment])
end
这不起作用,并且没有说明评论的哪个帖子属于。我还在显示帖子页面上显示“添加评论”表单,以便在帖子下方创建评论墙,但我的表单仍然只是说
<%= form_for @comment do |f| %>
并且不会将评论与“显示”下的帖子控制器中的帖子相关联。
我意识到可能有一个简单的答案,但找不到任何解释我具体问题的资源。任何帮助表示赞赏。
答案 0 :(得分:1)
我会说你主要是将评论添加到特定帖子。所以从那里开始:
def create
@post = Post.find(params[:post_id]) # <== this may be just `id`
@comment = @post.comments.build(params[:comment])
@comment.user = current_user
if @comment.save
# ... do things
else
# .. render error
end
end
为此,您需要嵌套路线:
resources :posts do
resources :comments
end
您的form_for
需要指明嵌套路线:
<%= form_for [@post, @comment] %>
答案 1 :(得分:1)
你在CommentsController #create
中做了正确的事@comment = current_user.comments.build(params[:comment])
您缺少的部分包括params [:comment]中的post_id。这应该没问题,因为你总是知道你正在评论的帖子,你正在展示的那个。因此,在form_for @comment
<%= f.hidden_field :post_id, @post.id %>
我假设这是在你的show post视图中,你已经在你的PostController#show
中设置了@post答案 2 :(得分:0)
你可以这样做:
def create
@comment = Comment.new(params[:comment])
@comment.user = current_user
if @comment.save ...