我最初问过关于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
如何查询猫的孩子的所有照片或其兄弟姐妹的所有照片? 好像我需要这样的东西:
Photo.joins(cat.children)
Photo.joins(cat.siblings)
我知道这不是一个有效的代码。
答案 0 :(得分: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)
这应该有用。