Ruby on rails Rails:获取对象数组上的关系

Ruby on rails Rails:获取对象数组上的关系,ruby-on-rails,ruby-on-rails-3,activerecord,Ruby On Rails,Ruby On Rails 3,Activerecord,我不知道是否有一个好的答案。假设我有: users = User.where(:location => "Utopia") #=> Returns [user1,user2,user3,user4] 我想做一些类似的事情: users.photos #=> Returns all photos this group of users has 只需将所有照片取回,无需重复。我这样问是因为每次迭代都是一个DB调用。有没有什么好方法可以进行一次DB调用?最简单的方法是使用“渴望加

我不知道是否有一个好的答案。假设我有:

users = User.where(:location => "Utopia") #=> Returns [user1,user2,user3,user4]
我想做一些类似的事情:

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

只需将所有照片取回,无需重复。我这样问是因为每次迭代都是一个DB调用。有没有什么好方法可以进行一次DB调用?

最简单的方法是使用“渴望加载程序”:

users = User.where(:location => 'Utopia').includes(:photos)
这将在一个过程中获取用户,然后在另一个过程中获取关系及其关联的照片。如果您使用
JOIN
或subselect,您可以将其全部打包为一个调用,这是您的调用,但它看起来像这样:

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

第12节中提供了更多信息。

是的,执行内部联接比执行LOJ更有效-
photos=Photo.joins(:user)。其中(:users=>{:location=>'Utopia'})
是否可以指定执行联接时要使用的键?关系是通过
:has\u many:to
设置的,返回使用了错误的键集。