积极的记录.Model.Find.last

jun*_*one 4 ruby activerecord ruby-on-rails rails-activerecord

Trade和之间有一个ActiveRecord关系Execution.我可以得到

Trade.executions  #returns all exeuctions realated to the Trade
Run Code Online (Sandbox Code Playgroud)

如果我做

Trade.executions.last
Run Code Online (Sandbox Code Playgroud)

似乎似乎返回基于ID的最后一个执行记录.

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

mu *_*ort 12

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

你应该做其中一个:

highest_id_execution = trade.executions.order(:id).last
highest_id_execution = trade.executions.order('id desc').first
Run Code Online (Sandbox Code Playgroud)

这会让你执行trade最高的执行id.如果你真的想要最近创建的那个,那么你应该order(:created_at)改为:

most_recent_execution = trade.executions.order(:created_at).last
most_recent_execution = trade.executions.order('created_at desc').first
Run Code Online (Sandbox Code Playgroud)

idcreated_at列几乎总是以相同的顺序,但是你应该说你的意思,使事情更加清楚的是保持你的代码的人.

在这两种情况下,order(:x).last并且order('x desc').first是完全一样的,甚至解决完全相同的SQL所以无论使用哪一个是很有道理的给你.

  • => "executions.created_at"',这样'trade.executions.last`返回最后一个执行基础的秩序:+1,您可以添加一个`:order`选项的``执行关联,即`的has_many:处决,在`timestamp`而不是`id`. (2认同)