2013-06-27 3 views
1

Попытка отобразить список категорий, в которых есть сообщения. Звучит просто, но я немного застрял. Подобно этомуПоказать категории, которые есть сообщения в Rails 4

ActiveRecord find all parents that have associated children

class Category < ActiveRecord::Base 
    has_many :posts 
end 

class Post < ActiveRecord::Base 
    belongs_to :category 
end 

Можете ли вы помочь. Я попробовал named scope, но нарушил приложение.

ответ

1

Вы можете либо использовать сферу как этот

scope :with_posts, -> { includes(:posts).where("posts.id IS NOT NULL") } 

или с помощью counter_cache

class Category < ActiveRecord::Base 
    has_many :posts 
    scope :with_posts, -> { where("posts_count > ?", 0) } 
end 

class Post < ActiveRecord::Base 
    belongs_to :category, counter_cache: true 
end 

Обратите внимание, что вы должны добавить posts_count целое поле в к categories таблице для этой работы. Также рекомендуется сохранить все ваши категории в первый раз, чтобы заполнить это поле.

+0

Некоторая причина, по которой ваше решение не работает – Benjamin

+0

О, я сожалею: проверьте обновленный ответ! –

+0

Работает, когда я использую его на контроллере def show @categories = Category.where ('posts_count>?', 0) end – Benjamin