Rails как сделать запрос на несколько соединений - PullRequest
0 голосов
/ 04 апреля 2020

У меня есть три таблицы Contact, Non Medical Needs и Medical Needs. Contact has_many Немедицинские и медицинские потребности.

Потребности имеют логический столбец fulfilled, который отмечает необходимость как выполненную. Мне нужно запросить все контакты, в которых есть какие-либо неудовлетворенные медицинские или немедицинские потребности.

Я пытался сделать запрос, используя отношение или, но он только возвращает пересечение потребностей. Вот запрос, с которым я столкнулся

Contact.joins(:non_medical_reqs, :medicaL_reqs)
       .where(non_medical_reqs: {fullfilled: nil})
       .or(Contact.joins(:non_medical_reqs, :medicaL_reqs)
       .where(medical_reqs: {fullfilled: nil}))

Edit Я использую Postgresql с Rails 6

1 Ответ

0 голосов
/ 04 апреля 2020

Это может сработать. Я попробовал это на аналогичном отношении, которое я имею в проекте, и это, кажется, работает. С or я могу заставить его работать только с немного другой структурой для предложения where.

Contact.left_joins(:non_medical_reqs, :medicaL_reqs).where('non_medical_reqs.fullfilled = ?', nil).or(Contact.left_joins(:non_medical_reqs, :medicaL_reqs).where('medical_reqs.fullfilled = ?', nil}))

Чтобы проверить это, я бы потянул следующие запросы и сравнил результаты:

Contact.left_joins(:non_medical_reqs).where('non_medical_reqs.fullfilled = ?', nil)

и

Contact.left_joins(:medicaL_reqs).where('medical_reqs.fullfilled = ?', nil})

И убедитесь, что эти два набора совпадают с результатами первого запроса.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...