我坚持拼图。我有两个模型,分类和帖子
类别以递归方式循环到它自身 - 它属于父类别并且具有许多子类别。因此,它有很多帖子,任何类别都可以有帖子和许多儿童类别可以拥有自己的帖子
class Post < ActiveRecord::Base
belongs_to :category
end
class Category < ActiveRecord::Base
belongs_to :parent_category, class_name: 'Category'
has_many :children_categories, class_name: 'Category', foreign_key: 'parent_category_id'
has_many :posts
def all_posts
# magic here
end
end
我需要实现 Category 的 all_posts 方法,因此它返回 ActiveRecord :: Relation ,它将所有属于该类别及其子项的帖子结合在一起
谢谢。
P.S。我使用Rails 4.1.1和Ruby 2.1.2以及PostrgreSQL 9.3
答案 0 :(得分:1)
def all_posts
ids = [id]
more_ids = [id]
until (more_ids = self.class.where(:parent_category_id => more_ids).pluck(:id)).empty?
ids += more_ids
end
Post.where(:category_id => ids)
end