postgresql:选择所有关联记录匹配条件的记录

时间:2014-10-01 23:52:03

标签: sql ruby postgresql activerecord

我有:

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

想法?

1 个答案:

答案 0 :(得分:2)

我会寻找没有matches: false实例的记录。我可能会使用子查询,比如......

A.joins(:bs).where('(select count(*) from bs where matches = false) = 0')

但可能有更多的ActiveRecord方式。