1

我正在尝试向 Post 模型添加评论

class Comment < ActiveRecord::Base
    belongs_to :post
    belongs_to :user #should this be has_one :user instead?
....

如何设置我的新评论和创建操作以获取 current_user 和当前帖子?

guides.rubyonrails.org 建议

控制器:

def create
    @post = Post.find(params[:post_id])
    @comment = @post.comments.create(params[:comment])
    redirect_to post_path(@post)
end

看法

<%= form_for([@post, @post.comments.build]) do |f| %>
...

然而,这似乎只是为了与帖子相关联,而不是与用户相关联。如何设置两个关联?

4

2 回答 2

6

我假设您current_user()的控制器中某处有一个方法。

所以应该这样做:

def create
    @post = Post.find(params[:post_id])
    @comment = @post.comments.build(params[:comment])
    @comment.user = current_user
    @comment.save
    redirect_to post_path(@post)
end
于 2012-04-05T22:47:50.107 回答
0

Deradon 很好地回答了这个问题,但我更喜欢在新的评论表单本身中包含这种逻辑。例如,您可以不调用这些变量:

应用程序/views/comments/_form.html.erb:

<%= f.hidden_field :user_id, value: current_user.id %>
<%= f.hidden_field :post_id, value: @post.id %>

这当然假设您的新评论表单嵌入在“发布展示”页面中,因此@post 可用:

应用程序/views/posts/show.html.erb:

<body>
  <%= render @post %>
  <%= render 'comments/_form' %>
</body>

这会将 post_id 和 user_id 直接添加到数据库中以获取新评论。另外,不要忘记为这些外键创建索引,以便数据库可以更快地访问。如果你不知道怎么做,谷歌它!

于 2013-12-01T21:06:12.430 回答