2014-01-19 118 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