我有两个模型,Clinician
和Patient
。 clinician
has_many: patients
和patient
belongs_to :clinician
。第三个模型SharedPatient
旨在存储patients
和clinicians
之间的其他关联,因为patient
可以由除clinicians
以外的许多其他belongs_to
共享{1}}。这是使用has_and_belongs_to_many
关系完成的。
见模特:
class Clinician < ActiveRecord::Base
has_many :patients
has_and_belongs_to_many :shared_patients, join_table: 'shared_patients'
end
class Patient < ActiveRecord::Base
belongs_to :clinician
has_and_belongs_to_many :shared_clinicians, join_table: 'shared_patients'
end
class SharedPatient < ActiveRecord::Base
belongs_to :clinician
belongs_to :patient
end
这就是我的模型在db中的设置方式:
Clinician:
first_name: string
last_name: string
user_id: integer
Patient:
clinician_id: integer
first_name: string
last_name: string
user_id: integer
SharedPatient:
clinician_id: integer
patient_id: integer
使用这些我想显示clinicians
与patient
共享的列表。
这就是我现在在控制器中的内容:
@patient = Patient.find_by(user_id: current_user.patient.id)
@clinicianslist = @patient.shared_clinicians
它试图使用以下方式在视图中显示这些:
<% @clinicianslist.each do |list| %>
<p><%= link_to Clinician.find_by(id: list).full_name, clinician_path(list) %></p>
<% end %>
使用我现在所拥有的,在尝试加载视图时出现错误:
患者中的NameError#show
未初始化的常数患者:: SharedClinician
运行
时出现同样的错误Patient.find_by(id:1259).shared_clinicians
在控制台中。
有关解决此错误或构建模型以获得我想要的关联的任何建议都会很棒。感谢
答案 0 :(得分:3)
您不需要SharedPatient
模型,因此应将其删除。
错误是因为Rails无法从关联名称或表名中猜出类名。试试这个:
class Clinician < ActiveRecord::Base
has_many :patients
has_and_belongs_to_many :shared_patients, join_table: 'shared_patients', class_name: 'Patient'
end
class Patient < ActiveRecord::Base
belongs_to :clinician
has_and_belongs_to_many :shared_clinicians, join_table: 'shared_patients', class_name: 'Clinician'
end
这告诉Rails使用哪个类。目前,它正在猜测SharedClinician
,这是错误的。
答案 1 :(得分:0)
我想说在这种情况下,使用连接模型并没有那么多意义。例如,如果它是具有自己的数据和逻辑的Appointment
对象,那将是有意义的。
相反,您应该创建一个patients_clinicians
联接表,并将关系定义为:
class Clinician < ActiveRecord::Base
has_and_belongs_to_many :patients
end
class Patient < ActiveRecord::Base
has_and_belongs_to_many :clinicians
end
约定优于配置......