2014-01-09 2 views
0

У меня есть следующий вид, чтобы показать категории с графомкак показать количество каждого списка категорий рельсы

<% @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 с точки зрения не является хорошей идеей. Есть ли другой способ выполнить такую ​​операцию.

Я получаю правильный счет, но мне нужен лучший способ сделать это. может кто-нибудь помочь

+0

http://api.rubyonrails.org/classes/ActiveRecord/Calculations.html#method-i-average –

+0

@NitinJ Это нормально из приведенного выше документа' Person.count (: age) ', но как могу ли я подсчитать количество людей с возрастом 21. – kndwsu

+0

Person.group (: age) .count (21) –

ответ

0

Вашей Post модели должны иметь объем на нем, который инкапсулирует эту логику статуса:

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

Тогда называть это как так с точки зрения:

sub_category.posts.active.count 
+0

, и если вы используете много раз, поместите этот вызов в метод. 'def active_post_count; self.active.posts.count; end' – wacko

0

использование объем сделать то То же самое, ваше решение в порядке. вам не нужно делать этот контроллер.

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

Единственная проблема, которую я вижу с этим он вызывает N + 1 запросы, потому что вы делаете 1 запрос для категорий THEN другого запроса для каждой категории. Это нормально с небольшими количествами, однако это может вызвать серьезные проблемы с производительностью позже.

1) Я рекомендую вам посмотреть в «counter_cache» ING: - http://api.rubyonrails.org/classes/ActiveRecord/Associations/ClassMethods.html#method-i-belongs_to

2) или при активации/деактивации сообщений, создать метод, который будет увеличивать/уменьшать атрибут на Почты категории (то есть " active_posts ")

Смежные вопросы