Rails:根据两个has_one到关联来查找对象

时间:2014-12-30 20:13:03

标签: ruby-on-rails ruby-on-rails-4 rails-activerecord has-one has-one-through

我的rails应用包含UserConvoUserConvo型号。 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.hostconvo.guest都是用户。

1 个答案:

答案 0 :(得分:0)

看起来,当您进行加入时,host加入称为user_convosguest加入称为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")