0

我最初问过这个关于acts_as_tree 的问题,但它似乎更笼统,所以我在这里重新表述一下。我有一个使用acts_as_tree 的模型“类别”。我经常发现自己需要将它与其他模型结合起来进行各种查询,但我不知道如何使用所提供的范围(如子级、祖先、兄弟姐妹、后代)来创建我需要的条件。

具体例子:

class Category < ActiveRecord::Base
  acts_as_tree
  has_many :photo
end

class Photo
  belongs_to :category
end

cat = Category.first

如何查询 cat 的所有孩子的照片或它的兄弟姐妹的所有照片?好像我需要类似的东西:

Photo.joins(cat.children)
Photo.joins(cat.siblings)

我知道这不是有效的代码。

4

1 回答 1

0

由于 act_as_tree 并没有真正使用范围​​,而是使用返回结果的方法,因此您可以这样做:

class Photo
  belongs_to :category

  scope :from_category, -> (category) {
      joins(:category).where(category: category)
  }
end

cat = Category.first

Photo.from_category(cat.children)
Photo.from_category(cat.siblings)

这应该有效。

于 2014-05-29T03:12:34.740 回答