我有两个模型,一个是Repository
,第二个是Photo
。存储库可以有很多照片。
我的最终目标是为每个存储库显示一组存储库和显示图片。
我想做类似的事情:
@repositories = Repository.limit(10)
repositories_id = @repositories.map &:id
@photos = Photos.where(repository_id: repositories_id)
然而,这将返回具有相同repository_id的多个照片对象,我只想要第一个实例。
答案 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)