0

我的 rails 应用程序有User,ConvoUserConvo模型。UserConvo 属于 User 和 Convo。康沃看起来像这样:

class Convo < ActiveRecord::Base

  has_one :host_user_convo,  ->{ where role: 'host' }, class_name: 'UserConvo'
  has_one :host, through: :host_user_convo, source: :user
  has_one :guest_user_convo, ->{ where role: 'guest' }, class_name: 'UserConvo'
  has_one :guest, through: :guest_user_convo, source: :user

  ...

end

如果查询具有特定主机和来宾的 Convo,我想要做什么。

我试过这个:

Convo.joins(:host, :guest).where('host.id = foo AND guest.id = bar').references(:host, :guest)

includes还有一些用代替的排列joins

本质上,我如何通过关联找到基于其中两个 has_one 的对象。请记住,convo.host作为convo.guest用户。

4

1 回答 1

0

看起来当您进行连接时,host连接被调用user_convos并且guest连接被调用guest_user_convos_convos_join

因此,如果您有一个 id 为 3 的主机和一个 id 为 4 的来宾,则以下似乎可行:

Convo.joins(:host, :guest).where("user_convos.user_id = 3 AND guest_user_convos_convos_join.user_id = 4")
于 2014-12-30T21:33:07.920 回答