У меня есть то, что, как я подозреваю, является основным вопросом. В моем rails
приложении One user
имеет множество scores
. Есть ли способ получить все оценки активного отношения пользователей. Я могу делать user.scores (очевидно), но если пользователи - группа пользователей, мне нужно сделать что-то вроде users.scores
. Это явно неверно.Rails: Получение всех объектов has_many, связанных с активным отношением родителей
ответ
Вы можете использовать
Score.where(user: users)
Это будет строить SQL LIKE
select * from scores where user_id in (select *.id from users where ..)
Пробовали ли вы следующее?
@users.collect(&:scores).flatten!
Я думаю, что принятый ответ более эффективен. Исправьте меня, если я ошибаюсь – GhostRider
Оба будут создавать тот же базовый 'sql'. Какой из них зависит от вашего сценария и другого контекста. В любом случае, я бы переместил эту логику к модели для проверки и обслуживания. – Dharam
Вы не правы @Dharam, ваш код производит N + 1 запросов. Но его можно было бы улучшить, используя 'includes':' @ users.includes (: score) .collect (&: score) .flatten! '- это будет всего 2 запроса. – MikDiet
Хороший человек. Большое спасибо – GhostRider