Rails通过has_many:through查找

6

我希望找到一种基于has_many through关联子级模型的查询方式。

我有三个模型:

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])

只是好奇...是否有参与者模型(和随后的表格)? - craig.kaminsky
不是的,参与者是用户模型。 - user3740962
@craig.kaminsky - 那个查询会起作用。 - Mark Swardstrom
好的,知道了。将删除不正确的注释。 - craig.kaminsky
3个回答

12

听起来你只是想要对话,如果是这样,你可以加入

Conversation.joins(:participants).where(:users => { :id => params[:participants] } )
否则,如果您想要急切地加载参与者,请使用includes
Conversation.includes(:participants).where(:users => { :id => params[:participants] } )

2
您可以像这样传递一个数组:
Conversation.includes(:participants).where(:id => params[:participants])

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

我认为这将测试会话的ID而不是参与者的ID。 - Mark Swardstrom
是的,它检查了conversation.id: /。 - user3740962
2
我认为您不想将对话 ID 与用户 ID 进行测试。 - Mark Swardstrom

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

假设participant_id是conversation_participants表中参与者的外键。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接