Rails:两个模型之间的多个活动记录关系

时间:2017-09-26 17:39:55

标签: ruby-on-rails

简短版本,然后是细节:

在我的应用程序中,用户有两个角色,即员工和临床医生。员工用户创建患者记录。有时,工作人员用户将为他们自己的患者创建患者记录,并且有时工作人员用户将为具有另一个工作人员用户作为他们的医生的患者创建患者记录。我的目的是在每个患者记录中包括创建记录的员工用户以及该患者的医生的员工用户。我无法找出正确的活动记录关系来使这项工作。

在我的病人表中,我有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

医生不存在作为模型 - 必须为此工作吗?有没有办法让它再次引用用户?

1 个答案:

答案 0 :(得分:1)

您不需要创建单独的医生模型,但您需要更改Patient模型中的有效记录关联。由于您说患者表上有doctor_id,这意味着您应该使用belongs_to :doctor代替has_one :doctor

但通过这样的活动记录会假设你有一张医生桌。由于情况并非如此,您需要向class_name添加foreign_keybelongs_to个参数,以便活动记录知道如何正确生成查询:

class Patient < ApplicationRecord
  belongs_to :doctor, class_name: 'User', foreign_key: 'doctor_id'
end