简短版本,然后是细节:
在我的应用程序中,用户有两个角色,即员工和临床医生。员工用户创建患者记录。有时,工作人员用户将为他们自己的患者创建患者记录,并且有时工作人员用户将为具有另一个工作人员用户作为他们的医生的患者创建患者记录。我的目的是在每个患者记录中包括创建记录的员工用户以及该患者的医生的员工用户。我无法找出正确的活动记录关系来使这项工作。
在我的病人表中,我有user_id来保存创建病历的员工用户的ID。在我创建患者并执行Patient.last.user时,它会在控制台中返回创建记录的用户。
在我的病人表中,我也有doctor_id来保存该病人的医生的工作人员的身份。在我创建患者并且做Patient.last.doctor的控制台中,我收到此错误:
ActiveRecord :: HasManyThroughAssociationNotFoundError:找不到关联:模型患者中的用户
我成功地保存了doctor_id,但我似乎无法按照我想要的方式取回医生的名字。我是不是错了,或者这是不可能的,因为我正在使用的模式?
详细说明:
class User < ApplicationRecord
include Clearance::User
include StaffUser
include ClinicianUser
validates :first_name, :last_name, :role, presence: true
enum role: { staff: 0, clinician: 1 }
我有员工关注和临床医生关注的问题,存在于应用程序/模型/关注点下:
clinician_user.rb
require 'active_support/concern'
module ClinicianUser
extend ActiveSupport::Concern
included do
has_one :clinician_profile
has_many :lists
has_many :universities, through: :lists
after_create :create_clinician_profile
end
class_methods do
end
end
staff_user.rb
module StaffUser
extend ActiveSupport::Concern
included do
belongs_to :university
has_many :patients
has_many :referral_requests
validates :university_id, presence: true
end
class_methods do
end
end
以下是患者模型:
class Patient < ApplicationRecord
belongs_to :user, -> { where role: :staff }
has_and_belongs_to_many :genders
has_and_belongs_to_many :concerns
has_and_belongs_to_many :insurances
has_and_belongs_to_many :races
has_many :referral_requests
has_one :doctor, through: :users
end
医生不存在作为模型 - 必须为此工作吗?有没有办法让它再次引用用户?
答案 0 :(得分:1)
您不需要创建单独的医生模型,但您需要更改Patient
模型中的有效记录关联。由于您说患者表上有doctor_id
,这意味着您应该使用belongs_to :doctor
代替has_one :doctor
。
但通过这样的活动记录会假设你有一张医生桌。由于情况并非如此,您需要向class_name
添加foreign_key
和belongs_to
个参数,以便活动记录知道如何正确生成查询:
class Patient < ApplicationRecord
belongs_to :doctor, class_name: 'User', foreign_key: 'doctor_id'
end