我正在学习rails并且我遇到了一个问题。我的模型有多对多的关系。很难解释我正在使用的模型,因为它们对我的工作领域过于具体,所以我将使用rails guide中的示例稍作修改。
以下是模型:
class Physician < ActiveRecord::Base
has_many :appointments
has_many :patients, through: :appointments
end
class Appointment < ActiveRecord::Base
attr_accessor :appointment_time
belongs_to :physician
belongs_to :patient
end
class Patient < ActiveRecord::Base
attr_accessor :name, :age
has_many :appointments
has_many :physicians, through: :appointments
end
我想要一份患者名单,他们的Appointment.appointment_time。
我可以使用physician.patients
列出与医生相关的所有患者。我怎样才能包括预约时间?一旦我有了患者名单,我就可以考虑查询约会,但我想知道是否有“铁路”方式这样做(类似physician.patients_with_appointments
)。如果没有,那么有效的方法是什么?
答案 0 :(得分:2)
physician.appointments.includes(:patients).each do |appointment|
puts appointment.appointment_time
puts appointment.patient.name
end
**未经测试
据我所知,您正在寻找的导轨方式并不存在。为了确保您没有在每个循环上加载每个循环,您可以使用包含。我不确定我是否将包含放在正确的位置,因为我目前无法访问rails控制台。
如果有很多记录你可能想要使用find_each批量查找,但对于你的例子,这应该有用。
答案 1 :(得分:0)
正如phil.ts所说:
patients = physician.patients.include(:appointments)
会做到这一点。
现在你做的时候:
patients.appointment
数据库不需要额外的查询,因为rails知道将它们包含在第一个查询中。