我在Trade
和Execution
之间存在ActiveRecord关系。我可以得到
Trade.executions #returns all exeuctions realated to the Trade
如果我这样做
Trade.executions.last
似乎似乎返回了基于ID的最后一条执行记录。
这是根据ID检索与Trade相关的最后一条执行记录的正确方法吗?
答案 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_at
和order(:x).last
完全相同,甚至可以解析为完全相同的SQL,因此请使用对您最有意义的SQL。
答案 1 :(得分:1)