活动记录-多次连接同一张表

时间:2018-08-22 19:58:21

标签: ruby-on-rails rails-activerecord

我有一个模型A,它属于我的User模型。我也有一个模型B,它既属于我的B模型,也属于我的User模型(这是两个不同的用户,例如医生和患者)。我想做的是这样的查询:

B.joins(:user, {a: :user}).where("patient.name = 'some condition' or doctor.name='some other condition'")

这里的要点是:如何指定我要查询的users.name是与A或B模型相关联的用户? 任何帮助将不胜感激,谢谢!

2 个答案:

答案 0 :(得分:0)

您可以创建从Patient继承的名为DoctorUser的新类,然后将用户称为患者和医生,而不是普通用户。

class Doctor < User
  has_many :a
end
class Patient < User
  has_many :b
end

这是单表继承: https://api.rubyonrails.org/classes/ActiveRecord/Inheritance.html

答案 1 :(得分:0)

也许这样的事情可行吗? (我尚未测试代码)

class User < ApplicationRecord
  has_many :doctors
  has_many :patients, through: :doctors
end

class Doctor < ApplicationRecord
  belongs_to :user
  has_many :patients
end

class Patient < ApplicationRecord
  belongs_to :doctor
  belongs_to :user
end

Patient.joins(user: {doctors: :user}).where("patient.name = 'some condition' or doctor.name='some other condition'")

希望这会有所帮助!