Rails 0大小关联的范围

时间:2011-06-21 19:57:48

标签: ruby-on-rails activerecord

我无法找出所有没有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解决方案。

1 个答案:

答案 0 :(得分:3)

您需要子选择或外部联接+组+唯一来解决您的问题。使用Rails的AR无法实现AFAIK。

近似将是使用AR的counter-cache功能,并使您的查询简单

scope :has_no_bars, where("bars_count = 0")

这不是100%正确的关系,但可以节省大量的工作,并且可以更好地扩展。