积极的记录。 Model.Find.last

时间:2012-03-20 01:09:59

标签: ruby-on-rails ruby activerecord rails-activerecord

我在TradeExecution之间存在ActiveRecord关系。我可以得到

Trade.executions  #returns all exeuctions realated to the Trade

如果我这样做

Trade.executions.last

似乎似乎返回了基于ID的最后一条执行记录。

这是根据ID检索与Trade相关的最后一条执行记录的正确方法吗?

2 个答案:

答案 0 :(得分:12)

不,不能保证能为您提供最高id的执行。如果未指定显式排序,则记录可以按任何顺序从数据库中输出。他们看起来像id排序的事实只是一个方便的事故。

您应该执行以下操作之一:

highest_id_execution = trade.executions.order(:id).last
highest_id_execution = trade.executions.order('id desc').first

这将为您提供具有最高trade的{​​{1}}的执行权。如果您真的想要最近创建的那个,那么您应该id代替:

order(:created_at)

most_recent_execution = trade.executions.order(:created_at).last most_recent_execution = trade.executions.order('created_at desc').first id列几乎总是按照相同的顺序排列,但您应该说出让维护代码的人更清楚的意思。

在这两种情况下,created_atorder(:x).last完全相同,甚至可以解析为完全相同的SQL,因此请使用对您最有意义的SQL。

答案 1 :(得分:1)

#last将根据主键返回最后一条记录。如果您的主键不是id,那么您需要更明确。

这是documentationcode

正如@muistooshort所提到的那样,明确表示没有坏处:)