到目前为止,这是我的文章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>
答案 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::Calculations
的count
method类。您的模型中定义了这种关系。在内部,ActiveRecord将调用COUNT
SQL查询来确定与您的文章匹配的评论数。
答案 2 :(得分:0)
您可以通过
获得计数
article.comments.count