最近レビューでよく書くのでまとめておきます。
指摘
idでソートするとか、idがインクリメンタルな数字ということを前提とするコードは避けよう。古い順に並べたいんだったらcreated_at
とかが作成日なんだから「古い順」ということをより表現していることになる。
理由
idをuuidとかに変えた場合バグになる。
古いものを取ろうとしてidでソートしてfirst
とかやっちゃいかん。
管理画面のユーザー一覧をid降順でソートしてて、最近追加されたユーザーは一番最初にきてたのuuidにしたら並びが変わった・困るとお客さんに言われることになる。
rails+postgresでidにuuidを使う - komagataのブログ
Microsoft系のライブラリやフレームワークもuuidがidのこと多い。
railsもfixturesではidはランダムに入るのでidがインクリメンタルな数字という前提のテストはコケる。(偶然動いたりするがそのうちコケる)
補足
もちろんだけど、こういうコードは全く問題ないヨ!
@post = Post.find(params[:id])
むしろidはidentifierなんだから本来の使い方。気をつけるのはソート。
たしかにおっしゃるとおり、「id順 = 時間順」と絶対視するのは危険ですね。
その一方で、インデックスを付けずにcreated_atでソートするのも、少し危ないかなーと思います。
このへんのあたりは、一言ではまとめきれないので、Qiitaにリプライ記事を書きました。
【Rails】idでソートするか?created_atでソートするか? 〜 Re: idの順番に依存しないコードを書こう - Qiita
https://qiita.com/jnchito/items/8bbbf3e803e56b97a498
よかったらこちらの記事を読んでみてください😃
> created_atにもわざわざindexを貼るんですかね?
はい。
> 伊藤淳一
おお、記事見させていただきましたー
リプライ記事を僕も書きましたー
idでソートする意図がない場合はソートしない - komagataのブログ http://docs.komagata.org/5592