has_many :through within same model
has_many :through within same model
我的数据库中有用户模型。它有作用。角色可以是病人或医生。我想维护 doctor_patient table.
doctor_patient.rb
belongs_to :doctor, class_name: 'User'
belongs_to :patient, class_name: 'User'
一个病人可以属于多个医生,一个医生可以有多个病人。通过关联,我更熟悉常规或正常 has_many,但面临与我在用户模型中扮演角色的场景相关的问题。
user.rb
user
has_many :doctor_patients
has_many :patients, :through => :doctor_patients, :class_name=> "User"
patient
has_many :doctor_patients
has_many :doctors, :through=> :doctor_patients, :class_name=> "User"
在 ActiveRecord 中,关联元数据(反射)作为散列存储在 class 属性中,名称用作键。因此,当您定义多个具有相同名称的关联时,您只是覆盖了之前的关联。
解决方案是为每个关联使用唯一的名称:
class User < ApplicationController
has_many :doctor_patients_as_doctor,
foreign_key: :doctor_id,
class_name: 'DoctorPatient'
has_many :patients,
through: :doctor_patients_as_doctor
has_many :doctor_patients_as_patient,
foreign_key: :patient_id,
class_name: 'DoctorPatient'
has_many :doctors,
through: :doctor_patients_as_patient
end
还要确保正确地将 table 复数化并将其命名为 doctor_patients
.
我的数据库中有用户模型。它有作用。角色可以是病人或医生。我想维护 doctor_patient table.
doctor_patient.rb
belongs_to :doctor, class_name: 'User'
belongs_to :patient, class_name: 'User'
一个病人可以属于多个医生,一个医生可以有多个病人。通过关联,我更熟悉常规或正常 has_many,但面临与我在用户模型中扮演角色的场景相关的问题。
user.rb
user
has_many :doctor_patients
has_many :patients, :through => :doctor_patients, :class_name=> "User"
patient
has_many :doctor_patients
has_many :doctors, :through=> :doctor_patients, :class_name=> "User"
在 ActiveRecord 中,关联元数据(反射)作为散列存储在 class 属性中,名称用作键。因此,当您定义多个具有相同名称的关联时,您只是覆盖了之前的关联。
解决方案是为每个关联使用唯一的名称:
class User < ApplicationController
has_many :doctor_patients_as_doctor,
foreign_key: :doctor_id,
class_name: 'DoctorPatient'
has_many :patients,
through: :doctor_patients_as_doctor
has_many :doctor_patients_as_patient,
foreign_key: :patient_id,
class_name: 'DoctorPatient'
has_many :doctors,
through: :doctor_patients_as_patient
end
还要确保正确地将 table 复数化并将其命名为 doctor_patients
.