いいえ、最高のid
の実行を保証するものではありません。明示的な順序付けを指定しない場合、レコードは任意の順序でデータベースから出力されます。 id
でソートされているように見えるという事実は、便利な事故です。
あなたはこれらのいずれかの実行する必要があります。
highest_id_execution = trade.executions.order(:id).last
highest_id_execution = trade.executions.order('id desc').first
あなたに最高id
を持ってtrade
の実行を与えるだろう。あなたが本当に最近作成したものにしたいなら、あなたは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
とorder('x desc').first
はまったく同じものであり、まったく同じSQLに解決されるので、どちらかがあなたに最も合っているものを使用してください。
+1、あなたは'を追加することができますこれは 'trade.executions.last'は' id'ではなく 'timestamp'に基づいて最後の実行を返します。 –
@KandadaBoggu:十分な真実ですが、私は不必要なORDER BYと 'reorder'sを避けるために最小限の関連付けを好みます。 –
私は、このアプローチをデフォルトのソート順を乗り越えて直感的なものにする非常にまれなケースで使用することを理解しています。 –