Rails计数有多少文章

时间:2012-08-29 17:09:50

标签: ruby-on-rails ruby ruby-on-rails-3 ruby-on-rails-3.1

我试图在文章#index中显示每篇文章的评论数量。

所以我有以下型号

resources Article do
 resources Comments do
 end
end

我知道在每篇文章中我都可以进行以下操作,这样可行:

@count = @article.comments.find(:all).count

只是在视图中显示计数。但是,当我在索引文件中并且不确定如何显示此事件atm存在多少注释时,问题就出现了。

提前致谢

3 个答案:

答案 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