我无法找出所有没有Bars的Foos的范围方法。那就是:
class Foo < ActiveRecord::Base
has_may :bars
end
class Bar < ActiveRecord::Base
belongs_to :foo
end
我想写一个范围方法,它返回所有没有条形的foos。类似的东西:
class Foo < ActiveRecord::Base
has_may :bars
scope :has_no_bars, includes(:bars).where("COUNT(foo.bars) = 0")
end
但我不明白合适的语法。有帮助吗?很高兴使用MetaWhere解决方案。
答案 0 :(得分:3)
您需要子选择或外部联接+组+唯一来解决您的问题。使用Rails的AR无法实现AFAIK。
近似将是使用AR的counter-cache功能,并使您的查询简单
scope :has_no_bars, where("bars_count = 0")
这不是100%正确的关系,但可以节省大量的工作,并且可以更好地扩展。