如何显示每个类别列表轨道的计数

时间:2014-01-09 17:34:39

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

我有以下视图来显示带有计数的类别

<% @categories.each do |category| %>
<% category.sub_categories.sort.each do |sub_category| %>
    <li><%= link_to sub_category.name, "category/#{sub_category.slug}", title: sub_category.name.capitalize %> <%= sub_category.posts.where(status: 1).count %></li>
<% end %>
<% end %>

但我不认为在视图中使用where并不是一个好主意。有没有其他方法可以执行此类操作。

我得到正确的计数,但我需要更好的方法来做到这一点。任何人都可以帮忙

3 个答案:

答案 0 :(得分:0)

您的Post模型应该有一个封装此状态逻辑的范围:

class Post < ActiveRecord::Base
  def self.active
    where(status: 1)
  end
end

然后从视图中调用它:

sub_category.posts.active.count

答案 1 :(得分:0)

使用范围来做同样的事情,否则你的解决方案是正确的。你不需要做这个控制器。

scope :active_posts, lambda{ where(status: 1)}

答案 2 :(得分:0)

我看到的唯一问题是它会导致N + 1个查询,因为您对类别进行了1个查询,然后对另一个查询进行了查询。这个数量很少,但是以后可能会导致严重的性能问题。

1)我建议你研究一下“counter_cache”: - http://api.rubyonrails.org/classes/ActiveRecord/Associations/ClassMethods.html#method-i-belongs_to

2)或者在激活/停用帖子时,创建一个方法,增加/减少帖子类别的属性(即“active_posts”)