Заказы имеют много элементов LineItems. У LineItems есть имена, такие как «автомобиль». Я хочу найти все заказы с позициями с именами, соответствующими одному шаблону.Когда запрос включает отношения, как я могу использовать сопоставление шаблонов на включенной таблице?
Я знаю, что могу сделать LineItem.where('name ~* :pat', pat: 'car')
, например.
Я также знаю, что могу сделать
Order.where.not(state: "cancelled")
.includes(:line_items)
.where(line_items: { name: "car" })
Я не уверен на синтаксис для объединения двух запросов. Я думаю, что это что-то вроде:
Orders.where.not(state: 'cancelled')
.includes(:line_items)
.where(line_items: ['name ~* :pat', pat: 'car'])
Это сложно для Google, поэтому я подумал, что поставлю его вам.
ПРИМЕЧАНИЕ: в прошлый раз у меня возник вопрос о Rails activerecord, частью решения было проверить SQL. В этом случае, однако, использование метода includes приводит к некоторому сумасшедшему страшному SQL. Попробуйте что-то вроде этого:
Order.includes(:line_items).where(line_item: { name: "car"}).to_sql
в вашем рельсовом пульте для приятного времяпровождения!
ПРИМЕЧАНИЯ: Мне нужна помощь в названии этого вопроса.