Rails计数文章数量



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

所以我有以下型号

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 中

相关内容

  • 没有找到相关文章

最新更新