使用has_many

时间:2015-11-26 17:42:24

标签: ruby-on-rails activerecord has-many-through

在此页面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 ,因为我想在它之后链接更多的方法。

我的问题是:我该怎么做?我可以使用joinswhere编写一个范围,但这不符合我上面提到的要求。我需要覆盖一些方法吗?我在兔子洞里吗?

1 个答案:

答案 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 

这只是一个开始!我建议你尽可能多地尝试一下,当你撞墙时再回答另一个问题。祝你好运!