我的rails应用包含User
,Convo
和UserConvo
型号。 UserConvo属于User和Convo。 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
都是用户。
答案 0 :(得分:0)
看起来,当您进行加入时,host
加入称为user_convos
,guest
加入称为guest_user_convos_convos_join
因此,如果你有一个id为3的主机和一个id为4的guest虚拟机,则以下内容似乎有效:
Convo.joins(:host, :guest).where("user_convos.user_id = 3 AND guest_user_convos_convos_join.user_id = 4")