我试图在文章#index中显示每篇文章的评论数量。
所以我有以下型号
resources Article do
resources Comments do
end
end
我知道在每篇文章中我都可以进行以下操作,这样可行:
@count = @article.comments.find(:all).count
只是在视图中显示计数。但是,当我在索引文件中并且不确定如何显示此事件atm存在多少注释时,问题就出现了。
提前致谢
答案 0 :(得分:2)
articles_controller.rb
def index
@articles = Article.all
end
物品/ 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
修改强>
如果你开始关心表现,我同意Kitto的评论。
添加此迁移:
class AddCommentsCountToArtices < ActiveRecord::Migration
def change
add_column :articles, :comments_count, :integer, null: false, default: 0
end
end
并将评论模型中的关系声明更改为:
belongs_to :article, counter_cache: true
然后,您可以拨打此article.comments_count
之类的电话来获取计数而不是atricle.comments.count
。如果计数为0,那就太好了,因为它甚至不进行查询(第13页的Rails 3路)。
如果您对counter_cache的工作原理感到好奇:它会向所属类(在本例中为Comment类)添加一个回调,每次创建或销毁注释时都会更新父文章的comments_counter属性。
此外,Obie Fernandez可以轻松地将counter_cache功能添加到demonstrated here的现有数据库中。
答案 1 :(得分:2)
在文章#index中,您可以遍历包含所有文章的实例变量。您的视图应如下所示:
@articles.each do |article|
article.name
.
.
article.comments.count
end
答案 2 :(得分:1)
@article.comments
将给出@article的所有评论。你不需要指定如下
@article.comments.find(:all)
用于显示每篇文章的评论数量,请执行
%table
%thead
%tbody
- @articles.each do |article|
%tr
= article.comments.count
视图是haml