1

私が2つのモデルを持っているとしましょう:

class Person < ActiveRecord::Base
  has_many :addresses
end
class Address < ActiveRecord::Base
  belongs_to :person
end

正確に2つのアドレスを持つすべての人を取得したいと思います。サブクエリでこれを行う簡単なActiveRecord/Arelの方法はありますか?私はそれを行うためにcounter_cacheを使用したくありません。

4

2 に答える 2

3

これは私にとってはうまくいきました(Rails 3、PostGreSQLを使用):

Patient.joins(:interventions).group('patients.id').having('count(patient_interventions.id) = 2')

あなたの場合、以下は正確に2つの住所を持つPersonsを返す必要があります。

Person.includes(:addresses)
      .select('persons.*')
      .group('persons.id')
      .having('count(addresses.id) = 2')
# Note use :joins instead of :includes if you don't want the addresses data
于 2012-12-14T17:33:57.373 に答える
0

@MrYoshijiによる回答は良いですが、2つのクエリを実行したい場合もあります。別のアプローチ:

person_ids = Address.select('person_id, count(person_id) as cnt').group('person_id').having('cnt = 2').pluck(:person_id)
Person.find person_ids
于 2012-12-14T17:39:24.377 に答える