假设我的模型看起来像这样:
class Foo < ActiveRecord::Base
has_many :bars, :through => :cakes
has_many :cakes
end
class Bar < ActiveRecord::Base
has_many :foos, :through => :cakes
has_many :cakes
end
class Cake < ActiveRecord::Base
belongs_to :foo
belongs_to :bar
end
我如何获得所有含有10个或更多条形的泡沫(因此有10个或更多个蛋糕)?
答案 0 :(得分:5)
Foo.all(:joins => :cakes,
:group => "cakes.foo_id",
:having => "count(cakes.bar_id) >= 10")
答案 1 :(得分:1)
好吧,我尝试了上面的答案,但遇到了问题。
为了我们的目的父亲has_many:儿子,好吗?
我想找到没有儿子的父亲。
上面没有用,因为它产生了一个内部联接......从而过滤掉了没有儿子的所有父亲。
以下确实对我有用:
Father.includes(:sons).group('fathers.id').having( 'count(sons.id)=0' )
它也适用于您需要的任何其他过滤器
Father.includes(:sons).group('fathers.id').having( 'count(sons.id)=3' )