首页 > 解决方案 > 如何过滤关联对象?

问题描述

我想要一个包含/加入的关联模型的过滤器。

practice.patients.joins('
  LEFT JOIN appointments on patients.id = appointments.patient_id 
  LEFT JOIN patient_treatments on patients.id = patient_treatments.patient_id
  LEFT JOIN invoices on patients.id = invoices.patient_id
  LEFT JOIN prescription_values on patients.id = prescription_values.patient_id'
  ).where('(appointments.created_at::date between :start_date and :end_date' ,{start_date: start_date, end_date: end_date })

我想要在此日期范围内预约的患者。

标签: sqlruby-on-railsrubyrails-activerecord

解决方案


您只能使用 加载过滤的关联对象eager_load

看看这个例子

result = [YourModel].patients.eager_load(:appointments).where("appointments.created_at::date between :start_date and :end_date" ,{start_date: Date.yesterday, end_date: Date.today })

它将加载在昨天今天之间创建预约的患者。它还将加载指定日期范围内的相关约会。

尝试做

result.first.appointments

我希望它有帮助!


推荐阅读