我试图在 article#index 中显示每篇文章有多少评论。
所以我有以下型号
resources Article do
resources Comments do
end
end
我知道在每篇文章中我都可以执行以下操作,这将起作用:
@count = @article.comments.find(:all).count
并且只显示在视图计数中。但是,当我在索引文件中并且不确定如何显示此事件 atm 存在多少评论时,问题就来了。
提前致谢
我试图在 article#index 中显示每篇文章有多少评论。
所以我有以下型号
resources Article do
resources Comments do
end
end
我知道在每篇文章中我都可以执行以下操作,这将起作用:
@count = @article.comments.find(:all).count
并且只显示在视图计数中。但是,当我在索引文件中并且不确定如何显示此事件 atm 存在多少评论时,问题就来了。
提前致谢
文章控制器.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
并将您的 Comment 模型中的关系声明更改为:
belongs_to :article, counter_cache: true
然后你可以像这样调用article.comments_count
来获取 count 而不是atricle.comments.count
. 如果计数为 0,那就太好了,因为它甚至不进行查询(Rails 3 Way 的第 195 页)。
如果您对 counter_cache 的工作原理感到好奇:它会向所属类(在本例中为 Comment 类)添加一个回调,该回调会在每次创建或销毁评论时更新父文章的 comments_counter 属性。
此外,正如Obie Fernandez所展示的,counter_cache 功能可以轻松添加到现有数据库中。
在articles#index 中,您可以遍历包含所有文章的实例变量。您的视图应如下所示:
@articles.each do |article|
article.name
.
.
article.comments.count
end
@article.comments
将给出@article 的所有评论。您不需要指定如下
@article.comments.find(:all)
要显示每篇文章的评论数,请执行
%table
%thead
%tbody
- @articles.each do |article|
%tr
= article.comments.count
视图是在haml