我有一个带有博客和评论的rails应用程序,每篇博文都有很多评论。在每个博客(show action)中,我都可以在表单上提交评论。我的问题是我需要将评论中的blog_id与我正在查看的博客相关联,我可以将其作为隐藏视图传递,但我要求最好的方法来做到这一点,也许是一个我不知道的帮助。
<h3>Leave a reply</h3>
<% @blog.comments.each do |comment| %>
<p>
<%= comment.text %>
</p>
<% end %>
<%= form_for(Comment.new) do |f| %>
<%= f.text_field :name %>
<%= f.text_area :text %>
<%= f.hidden_field :blog %>
<%= f.submit %>
<% end %>
答案 0 :(得分:3)
初始化新评论时,请通过博客实例进行初始化。
def show
@blog = Blog.find(params[:id])
@comment = @blog.comments.build
end
然后,在您的表单中,您希望使用注释实例而不是初始化新注释:
<%= form_for(@comment) do |f| %>
假设您拥有正确的关系,评论将自动拥有博客ID。
在创建操作中,您需要确保通过博客实例创建注释。
def create
@blog = Blog.find(params[:id])
@comment = @blog.comments.build(comment_params)
if @comment.save
# etc ...
end
虽然将评论与博客相关联可能不是一个好的设计决定,具体取决于您想要做什么,除非博客是指帖子。