0

3つのモデル:レコードの選択アソシエーション数に基づいて(参加?)

class Customer < ActiveRecord::Base 
    has_many :visits 
end 

class Visit < ActiveRecord::Base 
    belongs_to :customer 
    has_many :messages 
end 

class Message < ActiveRecord::Base 
    belong_to :visit 
end 

は今、私は、彼らがメッセージを持っている顧客訪問のすべてを返すようにしたいです。だから擬似コードでは次のようになります:

@customer = Customer.find(:id) 
@customer.visits.where(visit has messages) 

どうすればいいですか?

答えて

2

inner join:(推奨)を行います。

@customer.visits.where("EXISTS (SELECT messages.id FROM messages WHERE messages.visit_id == visits.id)") 

# returns a customer's visits that have at least one message 
@customer.visits.joins(:messages) 

は重複可能パフォーマンスの問題では

@customer.visits.joins(:messages).(“distinct(categories.id, categories.name)”) 

に対処することを確認し、別のオプションは、SQL EXISTS句を使用することです

またはSQL IN

@customer.visits.where("visits.id IN (SELECT messages.visit_id FROM messages)") 

関連する問題