如何在has_many:through关联中访问连接模型的属性

时间:2011-10-25 15:50:54

标签: ruby-on-rails ruby-on-rails-3 activerecord

使用rails guides上的示例:

class Physician < ActiveRecord::Base
  has_many :appointments
  has_many :patients, :through => :appointments
end

class Appointment < ActiveRecord::Base
  belongs_to :physician
  belongs_to :patient
end

class Patient < ActiveRecord::Base
  has_many :appointments
  has_many :physicians, :through => :appointments
end

Appointment具有属性exam_room_id。我想使用ActiveRecord获取包含Physician's Patients的结果集以及Patient所在的考试室。

我觉得我应该可以做这样的事情:

Physician.first.patients.each do |patient|
  patient.appointment.exam_room_id    
end

这不起作用,因为Physician has_many :appointments(即:不是一次约会)。

是否有一种优雅的“轨道方式”,可以与Appointment

的任意一侧一起访问has_many :through?的属性

2 个答案:

答案 0 :(得分:1)

我们可以执行以下操作,因为约会表隐式包含在连接查询中,

Physician.first.patients.select("appointments.exam_room_id ")
   .each{|patient| patient.exam_root_id}

答案 1 :(得分:0)

你将不得不逐步完成每次约会。

Physician.first.patients.each do |patient|
  patient.appointments.each {|appointment| puts appointment.exam_room_id}
end

这将向您显示患者所在的每个检查室(根据他们的预约)。我不认为这正是您正在寻找的,但想说明您需要迭代每位医生或患者预约以获得room_id。

如果您想要一套当前房间的结果,那么您将需要完成预约。 Physician.first.appointments.each。另外,您如何区分当前和过去的约会?