Rails: получить отношение к массиву объектов - PullRequest
5 голосов
/ 10 ноября 2011

Я не знаю, есть ли хороший ответ для этого. Допустим, у меня есть:

users = User.where(:location => "Utopia") #=> Returns [user1,user2,user3,user4]

Я бы хотел сделать что-то вроде:

users.photos #=> Returns all photos this group of users has

И просто верните все фотографии, не перебирая их. Я спрашиваю, потому что каждая итерация - это вызов БД. Есть ли хороший способ, который делает один вызов БД?

1 Ответ

5 голосов
/ 10 ноября 2011

Самый простой способ сделать это - использовать готовый загрузчик:

users = User.where(:location => 'Utopia').includes(:photos)

Это приведет к получению пользователей за один проход, затем к отношениям и связанным с ними фотографиям на другом. Вы можете объединить все это в один вызов, если вы используете JOIN или вложенный выбор, это ваш вызов, но он будет выглядеть примерно так:

photos = Photo.includes(:user).where('users.location' => 'Utopia')

Больше информации доступно в документации Интерфейс запросов Active Record в разделе 12.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...