Rails通过has_many查找:通过

Rails通过has_many查找:通过

问题描述:

我正在寻找一种基于has_many中通过关联的子查询模型的方法。Rails通过has_many查找:通过

我有3种型号:

class Conversation < ActiveRecord::Base 
    has_many :conversations_participants 
    has_many :participants, through: :conversations_participants 
end 

class ConversationsParticipant < ActiveRecord::Base 
    belongs_to :conversation 
    belongs_to :participant, class_name: 'User' 
end 

class User < ActiveRecord::Base 
    has_many :conversations_participants 
    has_many :conversations, through: :conversations_participants 
end 

我需要找到参与者一组ID匹配的对话。

这是我的时刻(不工作):

Conversation.includes(:participants).where(participants: params[:participants]) 
+0

只是好奇外键..有没有参与者模型(和后续表格)? –

+0

不,参与者是用户模型 – user3740962

+0

@ craig.kaminsky - 该查询将起作用。 – Swards

听起来像你只是想要谈话,如果是的话,你可以joins

Conversation.joins(:participants).where(:users => { :id => params[:participants] }) 

否则,如果你想急于负载参与者,使用includes

Conversation.includes(:participants).where(:users => { :id => params[:participants] }) 

你可以传递一个数组是这样的:

Conversation.includes(:participants).where(:id => params[:participants]) 

假设params[:participants]是一个数组。

+0

我认为这将测试conversation.id不是参与者.id – Swards

+0

是的,这将检查conversation.id:/ – user3740962

+2

我不认为你想测试用户ID对话id。 – Swards

Conversation.includes(:participants).where('conversation_participants.participant_id' => params[:participants]) 

假设participant_id是参与者在conversation_participants表