我试图在文章#索引中显示每篇文章的评论数量。
所以我有以下型号
resources Article do
resources Comments do
end
end
我知道在每一篇文章中我都可以做以下操作,这将起作用:
@count = @article.comments.find(:all).count
并且只显示在视图计数中。但当我在一个索引文件中,不确定如何显示这个事件atm存在多少注释时,问题就来了。
提前感谢
articles_controller.rb
def index
@articles = Article.all
end
articles/index.html.erb
<% @articles.each do |article| %>
comments in article <%= article.comments.count %>
<% end %>
嵌套路由(文章中的注释)在创建/销毁注释路由方面更重要。还要确保在文章模型中添加accepts_nested_attributes_for :comments
。这将允许你做这样的事情:
例如,在articles_controller.rb 中
def show
@article = Article.find(params[:id])
# creates a new comment object with atricle_id already initialized
@comment = @article.comments.build
end
编辑
如果你真的开始关心表现,我同意基托的评论。
添加此迁移:
class AddCommentsCountToArtices < ActiveRecord::Migration
def change
add_column :articles, :comments_count, :integer, null: false, default: 0
end
end
并将您在Comment模型中的关系声明更改为:
belongs_to :article, counter_cache: true
然后,您可以像这样调用article.comments_count
来获取计数,而不是atricle.comments.count
。如果计数为0,那就太好了,因为它甚至不进行查询(《Rails 3 Way》第195页)。
如果你想知道counter_cache是如何工作的:它向所属类(在本例中为Comment类)添加了一个回调,每次创建或销毁注释时,它都会更新父文章上的comments_counter属性。
此外,计数器缓存功能可以很容易地添加到现有的数据库中,正如Obie Fernandez在这里演示的那样。
在articles#索引中,您可以循环遍历包含所有文章的实例变量。你的观点应该是这样的:
@articles.each do |article|
article.name
.
.
article.comments.count
end
@article.comments
将给出@文章的所有评论。您不需要指定如下
@article.comments.find(:all)
要显示每篇文章的评论数,请执行
%table
%thead
%tbody
- @articles.each do |article|
%tr
= article.comments.count
视图在haml 中