2014-01-19 161 views
1

我在此列出博客文章的评论。例如,我对一篇博客文章有4条评论。如果我在我的视图中打印“@ comments.count”,它会正确返回4。但是如果我做了“@ comments.each do | comment |”,它会在最后给我回复那4条评论和一条空白评论。所以它总是给我一个空白的评论。Ruby on Rails 3“.each do”

控制器

def show 
    @post = BlogPost.find params[:id] 
    @blog_comment = @post.blog_comments.new 
    @comments = @post.blog_comments 
    @categories = BlogCategory.where(locale: I18n.locale) 
end 

视图

<ul> 
    <% @comments.each do |comment| %> 
    <li><%= comment.body %></li>  
    <% end %> 
</ul> 

我觉得哑巴问这些问题,但我不能找到解决办法。

回答

0

罗宾是正确的,你创建一个空的评论是列表的一部分。 “comments.count”仍然报告4,因为它会触发不包含新(未保存)注释的SQL计数查询。要解决这个最简单的方法可能是实例化的形式发表评论没有关联的部分:

@blog_comment = BlogComment.new(blog_post_id: @post.id) 

另一种方式是通过使用过滤掉新评论“new_record?”方法上的评论。

2

在你的表演动作,改线2的顺序和3

你正在创建一个新的(空)博客在第2行注释,然后创建的博客评论的数组(包括一空)在第3行

罗宾

+0

'blog_comments'返回对集合的引用,顺序无关紧要。 – Stefan