如何获得评论数

时间:2016-03-15 18:28:40

标签: ruby-on-rails

到目前为止,这是我的文章HAVING

index.html.erb

这是我的文章<table> <tr> <th>Title</th> <th>Text</th> <th colspan="3"></th> <th>Total Number of Comments Per Article</th> </tr> <% @articles.each do |article| %> <tr> <td><%= article.title %></td> <td><%= article.text %></td> <td><%= link_to 'Show', article_path(article) %></td> <td><%= link_to 'Edit', edit_article_path(article) %></td> <td><%= link_to 'Destroy', article_path(article), method: :delete, data: { confirm: 'Are you sure?' } %></td> <td>Placeholder</td> </tr> <% end %> </table> <p>Total Number of Articles in database: <%= @count_of_articles %></p> <h4>All Comments Written So Far</h> <% @comments.each do |c| %> <p><b><%= c.commenter %></b></p> <p><%= c.body %></p> <% end %> <%= link_to 'New Article', new_article_path %> 行动

index

我想弄清楚如何在 def index @articles = Article.all @count_of_articles = @articles.count @comments = Comment.all end

中放置每篇文章的评论数量

我该怎么做?

修改

<td>Placeholder</td>

3 个答案:

答案 0 :(得分:1)

通过在视图中执行article.comments.count,您基本上为数据库中的每篇文章运行sql查询。为什么不收集控制器中的所有记录,并在您的视图中询问计数?,例如:

在控制器中:

@comments_by_article = Comment.all.group_by(&:article_id)

并且,在您看来:

<td><%= @comments_by_article[article.id] && @comments_by_article[article.id].count || 0 %></td>

这样,rails会在您的控制器中缓存@comments_by_article,并且您将一次点击数据库。

答案 1 :(得分:0)

只是count

<table>
  <tr>
    <th>Title</th>
    <th>Text</th>
    <th colspan="3"></th>
    <th>Total Number of Comments Per Article</th>
  </tr>

  <% @articles.each do |article| %>
    <tr>
      <td><%= article.title %></td>
      <td><%= article.text %></td>
      <td><%= link_to 'Show', article_path(article) %></td>
      <td><%= link_to 'Edit', edit_article_path(article) %></td>
      <td><%= link_to 'Destroy', article_path(article),
              method: :delete,
              data: { confirm: 'Are you sure?' } %></td>
      <td><%= article.comments.count %></td>
    </tr>
  <% end %>
</table>

article.comments是一个ActiveRecord::Relation,它扩展了包含ActiveRecord::Calculationscount method类。您的模型中定义了这种关系。在内部,ActiveRecord将调用COUNT SQL查询来确定与您的文章匹配的评论数。

答案 2 :(得分:0)

您可以通过
获得计数 article.comments.count