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)
在id与created_at列几乎总是以相同的顺序,但是你应该说你的意思,使事情更加清楚的是保持你的代码的人.
在这两种情况下,order(:x).last并且order('x desc').first是完全一样的,甚至解决完全相同的SQL所以无论使用哪一个是很有道理的给你.
| 归档时间: |
|
| 查看次数: |
7373 次 |
| 最近记录: |