Проверьте, присутствует ли значение в parent или Ассоциации и получите родительский объект в Rails - PullRequest
1 голос
/ 11 ноября 2019

У меня есть две следующие модели:

class Parent
  has_many :children

class Child
  belongs_to :parent

Теперь мне нужно проверить значение атрибута city и получить Parent. Обе вышеперечисленные модели имеют столбцы city. Иногда значения разные, а иногда они одинаковы. Мне нужно сделать запрос, подобный этому:

city_name = #some city name
parents = Parent.where(city: city_name).presence || Parent.joins(:children).where(children: {city: city_name})

Как я могу объединить это в один запрос sql или activerecord?

1 Ответ

2 голосов
/ 11 ноября 2019

Вы можете использовать or:

Parent
  .joins(:children)
  .where(city: city_name)
  .or(Parent.joins(:children).where(children: { city: name }))

Независимо от того, используете ли вы объединения, чтобы получить Родителей по их городу, при использовании объединений вам необходимо «ставить префикс» в таблицу соединений для фильтрации их строк.

Если вам это неудобно, вы можете использовать строковую версию

Parent
  .joins(:children)
  .where('parents.city = :city OR children.city = :city', city: city_name)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...