从递归has_many关联中获取记录

时间:2014-09-18 17:58:39

标签: ruby-on-rails postgresql associations

我坚持拼图。我有两个模型,分类和帖子

类别以递归方式循环到它自身 - 它属于父类别并且具有许多子类别。因此,它有很多帖子,任何类别都可以有帖子和许多儿童类别可以拥有自己的帖子

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

1 个答案:

答案 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