Как я могу фильтровать связанные объекты? - PullRequest
0 голосов
/ 15 мая 2019

Мне нужен фильтр для включенных / присоединившихся ассоциированных моделей.

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 })

Я хочу, чтобы пациенты были на приеме в этом диапазоне дат.

Ответы [ 2 ]

1 голос
/ 15 мая 2019

Вы можете загрузить отфильтрованные связанные объекты только с помощью 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

Надеюсь, это поможет!

0 голосов
/ 15 мая 2019

Вы можете попробовать что-то вроде этого.

practice.patients.includes(:appointments).where(appointments: { created_at: start_date..end_date }).group("patients.id")
...