У меня есть следующая трехуровневая иерархия моделей:Выберите объекты, где все дети не имеют внуков
class Parent < AR::Base
has_many :children
end
class Child < AR::Base
has_many :grandchildren
belongs_to :parent
attr_accessible :my_number
end
class Grandchild < AR::Base
belongs_to :child
end
Ожидается, что все Parent
s будет иметь несколько children
, но каждый Child
могут или не могут иметь какие-либо grandchildren
.
Я хочу получить все Parent
объектов, для которых у всех children
нет grandchildren
. Как я могу это сделать? Я бы предпочел Rails-way, и у меня есть squeel available; но я соглашусь на сырой SQL.
Бонусные баллы, если вы можете дать мне все Parent
объекты, для которых не все children
имеют не grandchildren
и все children
имеют my_number < 5
.
Хочу отметить, что, конечно, , 'Parent.all.select {| p | p.children.all? {| С | c.grandchildren.empty? && c.my_number <5}} 'выполняет эту работу. Однако это не совсем эффективно. – Chowlett