Ruby on Rails 3“.each do”

时间:2014-01-19 13:56:40

标签: ruby-on-rails loops

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

控制器

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>

我对这些问题感到愚蠢,但我找不到解决方案。

2 个答案:

答案 0 :(得分:2)

在您的节目动作中,更改第2行和第3行的顺序。

您在第2行创建了一个新的(空)博客评论,然后在第3行创建了一个博客评论数组(包括空白评论)。

罗宾

答案 1 :(得分:0)

罗宾是正确的,你创建一个空的评论,作为列表的一部分。 &#34; comments.count&#34;仍然报告4因为它触发了一个不包含新(未保存)注释的SQL计数查询。解决这个问题的最简单方法可能是将表单的新注释实例化为协会的一部分:

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

另一种方法是使用&#34; new_record过滤掉新评论?&#34;关于评论的方法。