如何查询至少1个外键记录的活动记录?

时间:2013-08-11 01:58:46

标签: ruby-on-rails activerecord

我的用例很简单。这是我的模特。

Auction
===============
id
name
expiration_date

AuctionImage
===============
id
auction_id
image_path
filesize

我希望得到至少有Auctions的所有AuctionImage,并按expiration_date排序。

class Auction < ActiveRecord::Base
  has_many :auction_images
end

class AuctionImage < ActiveRecord::Base
  belongs_to :auction
end

有什么建议吗?

2 个答案:

答案 0 :(得分:1)

Auctions.joins(:auction_images).group(:id).order(:expiration_date)

答案 1 :(得分:0)

最快的SQL方法很可能是与EXISTS相关的子查询,其中性能与找到的子记录数无关。

要在Rails中实现这一点,您需要执行以下操作:

Auction.where("exists (select null from auction_images where aution_images.auction_id = auctions.id)").order("auctions.expiration_date desc")

如果你只是期望每次拍卖的图片非常少,那么基于外部联接的方法就可以了,但是对于group by或distinct的需求可能会导致从查询返回第一行的延迟,并且增加数据库服务器上的内存消耗。

因为expiration_date命令会使事情变慢,除非优化者发现了一个有益的索引。

相关问题