如何找到最高价的记录?

Zab*_*bba 19 activerecord max arel ruby-on-rails-3

这将返回最大信号,而不是完整的记录:

self.prices.maximum(:price_field)
Run Code Online (Sandbox Code Playgroud)

目前,我发现这样的记录:

def maximum_price
  self.prices.find(:first, :conditions => "price = #{self.prices.maximum(:price_field)}" )
end
Run Code Online (Sandbox Code Playgroud)

这是正确的方法吗?因为上面需要两个SQL语句来使它工作,并且它在某种程度上感觉不对.

PS.另外,我希望如果多个记录具有相同的"最大"值,那么它应该得到具有最新updated_at值的记录.这意味着另一个SQL语句?

PPS.有没有人知道Rails中AREL和非AREL事物的详细参考?ActiveRecord查询的Rails指南还不够!

(我正在使用Rails 3)

=== UPDATE ===

使用AREL我执行以下操作:

self.prices.order("updated_at DESC").maximum(:price_field)
Run Code Online (Sandbox Code Playgroud)

但是,这仅给出了最大价值,而不是完整的记录:(
而且,是利用maximum()真AREL?

TK-*_*421 30

这样的事怎么样?

self.prices.order("price DESC").first
Run Code Online (Sandbox Code Playgroud)

  • 这不是必要的.如果你'.first',Arel会自动添加限制 (10认同)
  • 您还可以使用limit来减少数据库工作负载,实例化对象的数量等,方法如下:`self.prices.order("price DESC").limit(1)` (3认同)