Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby-on-rails-4/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails Rails:基于对象的两个has_one-through关联查找对象_Ruby On Rails_Ruby On Rails 4_Rails Activerecord_Has One_Has One Through - Fatal编程技术网

Ruby on rails Rails:基于对象的两个has_one-through关联查找对象

Ruby on rails Rails:基于对象的两个has_one-through关联查找对象,ruby-on-rails,ruby-on-rails-4,rails-activerecord,has-one,has-one-through,Ruby On Rails,Ruby On Rails 4,Rails Activerecord,Has One,Has One Through,我的rails应用程序有User、conva和userconva模型。用户车队同时属于用户和车队。车队看起来像这样: 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 :gue

我的rails应用程序有User、conva和userconva模型。用户车队同时属于用户和车队。车队看起来像这样:

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
和一些包含而不是连接的置换


从本质上讲,我怎样才能找到一个基于两个has_-one关联的对象。请记住,conva.host和conva.guest都是用户。

进行加入时,主机加入称为user\u convas,而来宾加入称为guest\u user\u convas\u convas\u join

因此,如果您有一个id为3的主机和一个id为4的来宾,那么下面的方法似乎有效:

Convo.joins(:host, :guest).where("user_convos.user_id = 3 AND guest_user_convos_convos_join.user_id = 4")
列角色在哪里定义?
Convo.joins(:host, :guest).where("user_convos.user_id = 3 AND guest_user_convos_convos_join.user_id = 4")