У меня есть таблица ресторанов, в которых есть много оговорок. Теперь я хотел бы запросить все рестораны, и в случае, если у них есть резервация на 2 человека, он должен предварительно загрузить эти ассоциации. Если нет резерваций на 2, он все равно должен возвращать рестораны, но с пустой ассоциацией.Eager-load для пользовательских подключений в ActiveRecord
Для этого я попробовал следующий запрос:
Restaurant.eager_load(:reservations).where("number_of_people = ?", 2)
Однако, это не работает, так как он отбрасывает все рестораны, которые делают есть оговорки, но ни один из них не является для 2-х человек.
Итак, что бы я хотел сделать, это переместить это условие в условие соединения. Что-то вроде:
Restaurant.joins('LEFT OUTER JOIN \"reservations\" ON \"reservations\".\"restaurant_id\" = \"restaurants\".\"id\" AND \"reservations\".\"number_of_people\" = ?', 2)
Это дало бы результат мне нужно, однако это не поджимать «оговорки» ассоциаций, но вызывает вопрос N + 1.
Не похоже, что eager_load принимает пользовательские запросы. Я нашел эти темы: https://github.com/rails/rails/issues/12270 и JOIN ON ... AND conditions when eager loading association in ActiveRecord, но решения не найдено.
вы можете использовать '' includes' вместо joins' – uzaif
'includes' Безразлично» t принять пользовательский SQL либо –
Вам нужно создать новую задницу ociation с условием –