我有:
class A < ActiveRecord::Base
has_many :abs
has_many :bs, through: :abs
end
class AB
belongs_to :a
belongs_to :b
end
class B < ActiveRecord::Base
has_many :abs
has_many :as, through: :abs
# and has boolean db field :matches
end
所以我想为A
实现一个范围,用于检索与其关联的B matches=true
的所有的As。通常,我会做类似的事情:
A.joins(:bs).where(bs: { matches: true })
但是这将检索As 至少有一个 b匹配条件,而不是 all 。
想法?
答案 0 :(得分:2)
我会寻找没有matches: false
实例的记录。我可能会使用子查询,比如......
A.joins(:bs).where('(select count(*) from bs where matches = false) = 0')
但可能有更多的ActiveRecord方式。