2016-09-12 7 views
0

У меня есть то, что, как я подозреваю, является основным вопросом. В моем rails приложении One user имеет множество scores. Есть ли способ получить все оценки активного отношения пользователей. Я могу делать user.scores (очевидно), но если пользователи - группа пользователей, мне нужно сделать что-то вроде users.scores. Это явно неверно.Rails: Получение всех объектов has_many, связанных с активным отношением родителей

ответ

1

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

Score.where(user: users) 

Это будет строить SQL LIKE

select * from scores where user_id in (select *.id from users where ..) 
+0

Хороший человек. Большое спасибо – GhostRider

0

Пробовали ли вы следующее?

@users.collect(&:scores).flatten! 
+0

Я думаю, что принятый ответ более эффективен. Исправьте меня, если я ошибаюсь – GhostRider

+0

Оба будут создавать тот же базовый 'sql'. Какой из них зависит от вашего сценария и другого контекста. В любом случае, я бы переместил эту логику к модели для проверки и обслуживания. – Dharam

+0

Вы не правы @Dharam, ваш код производит N + 1 запросов. Но его можно было бы улучшить, используя 'includes':' @ users.includes (: score) .collect (&: score) .flatten! '- это будет всего 2 запроса. – MikDiet