在此页面http://guides.rubyonrails.org/association_basics.html#the-has-many-through-association中,我想要返回 appointmentments.appointment_date 和 patients.name Physician.first.appointments或Physician.first.patients
>在相同的数据结构中,返回类型是 ActiveRecord :: Relation ,因为我想在它之后链接更多的方法。
我的问题是:我该怎么做?我可以使用joins
和where
编写一个范围,但这不符合我上面提到的要求。我需要覆盖一些方法吗?我在兔子洞里吗?
答案 0 :(得分:2)
根据您的评论,您可以使用ActiveRecord
进行操作的基本示例:
class Doctor
has_many :appointments
has_many :patients, through: :appointments
end
class Appointment
belongs_to :doctor
belongs_to :patient
end
class Patient
#...
end
@doctor = Doctor.includes(:appointments).first
@doctor.name #=> Dr Howdoyoudo
@doctor.appointments.each {|ap| puts ap.expected_at }
# OR
@doctor.appointments.map {|app| app.expected_at }
#=> [Wed, 04 Mar 2015 09:23:37 CET +01:00, Wed, 04 Mar 2015 09:23:37 CET +03:00]
更新:如果您还需要患者,则必须在includes
中指定(仅为了避免O(n)查询):
@doctor = Doctor.includes(appointments: :patient).first
@doctor.appointments.map do |app|
"#{app.patient.name} is expected at #{app.expected_at}"
end
ActiveRelation
可以在这里重复使用:
Doctor.includes(appointments: :patient).class #=> ActiveRelation
Doctor.includes(appointments: :patient).appointments.class #=> ActiveRelation
这只是一个开始!我建议你尽可能多地尝试一下,当你撞墙时再回答另一个问题。祝你好运!