2014-10-09 103 views
0

我有一个博客和评论的Rails应用程序,每篇博文都有很多评论。在每个博客(show action)中,我都可以在表单上提交评论。我的问题是我需要将blog_id在评论中与我正在查看的博客相关联,我可以将其作为隐藏视图传递,但我要求最好的方式来做到这一点,也许我不知道的帮手。Rails 4与博客联系评论

<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 %> 

回答

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 

虽然评论与博客关联可能不是取决于你想做的事,除非博客你的意思后有什么好的设计决策。

+0

当我点击提交时,我没有通过博客ID,我明确这么做吗? – 2014-10-09 16:13:31

+0

你不需要。博客ID应该在params中。您的资源应该看起来像'/ blogs/1 /'< - 其中一个是博客ID。用它来获取博客。你的路线将是'资源:博客做资源:评论#...'< - 这将确保评论总是在博客路线下的约束。查看这里的嵌套资源:http://guides.rubyonrails.org/routing.html – Mohamad 2014-10-09 16:19:17