我在db中有以下迁移脚本的表:
class CreateAppointments < ActiveRecord::Migration
def change
create_table :physicians do |t|
t.string :name
t.timestamps null: false
end
create_table :patients do |t|
t.string :name
t.timestamps null: false
end
create_table :appointments do |t|
t.belongs_to :physician, index: true
t.belongs_to :patient, index: true
t.datetime :appointment_date
t.timestamps null: false
end
end
end
模型类看起来像:
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
我能够使用以下方法挑选特定医师的所有患者数据:
patients = Physician.find(123).patients
问题是,我需要在约会表中存储的appointment_date以及患者详细信息。不知怎的,我无法弄清楚如何获取它。
答案 0 :(得分:1)
您可以join
Patient
和Appointment
模型轻松获取所需数据:
Patient.joins(:appointments).where(. . . ).select('appointments.appointment_date')
您可以将所需条件放在where
子句中,并从要选择的select子句中的patients
和appointments
表中添加更多属性。
有关详细信息,请参阅Active Record Query Interface。
我最初误解了你的问题。在他的回答中midN
指出了获得你想要的东西的简单方法。
答案 1 :(得分:1)
关系看起来完全正确,所以查询应该很容易,或者你有问题吗?
如果您需要appointment_date,我可能会查询医生约会:
Physician.find_by(id: 123).appointments.each do |x|
print "Date: #{x.appointment_date}\n"
print "Patient: #{x.patient.name}"
end