根据列的值获取记录的第一个实例

时间:2015-06-27 16:29:56

标签: ruby-on-rails ruby database model

我有两个模型,一个是Repository,第二个是Photo。存储库可以有很多照片。

我的最终目标是为每个存储库显示一组存储库和显示图片。

我想做类似的事情:

@repositories = Repository.limit(10)
repositories_id = @repositories.map &:id
@photos = Photos.where(repository_id: repositories_id)

然而,这将返回具有相同repository_id的多个照片对象,我只想要第一个实例。

1 个答案:

答案 0 :(得分:1)

最简单的方法是将Photo查询移至map。它不会是最有效的查询模式,但在10个存储库中,它会好一段时间。

@repositories = Repository.limit(10)
@photos = @repositories.map do |repository|
  Photo.where(repository_id: repository.id).first
end

或者如果您设置了Repository.has_many :photos

@repositories = Repository.limit(10)
@photos = @repositories.map do |repository|
  repository.photos.first
end

更新,包含3个查询,而不是11个

@repositories = Repository.limit(10)
repository_ids = @repositories.map &:id
photo_ids = Photo.where(repository_id: repository_ids).group(:repository_id).minimum(:id)
photos = Photo.find(photo_ids.values)