我正在尝试为帖子模型添加评论
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| %>
...
然而,这似乎只是旨在与帖子相关联而不是用户。如何设置两个关联?
答案 0 :(得分: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
答案 1 :(得分:0)
Deradon很好地回答了这个问题,但我更倾向于在新的评论表中加入这种逻辑。例如,您可以拥有以下内容而不是调用这些变量:
应用程序/视图/评论/ _form.html.erb:
<%= f.hidden_field :user_id, value: current_user.id %>
<%= f.hidden_field :post_id, value: @post.id %>
这当然假设您的新评论表格嵌入在“展示后”页面中,以便@post可用:
应用程序/视图/帖/ show.html.erb:
<body>
<%= render @post %>
<%= render 'comments/_form' %>
</body>
这会将post_id和user_id直接添加到数据库中以获取新注释。另外,不要忘记为这些外键创建索引,以便数据库具有更快的访问权限。如果你不知道如何,谷歌吧!