現象
データベースにレコードを追加・更新していった場合、
ローカル環境(sqlite)ではレコードがidの昇順になっているが、
Heroku(PostgreSQL)では順序が異なる。
ローカル環境(sqlite)
id | title | created_at | updated_at
----+------------------------+----------------------------+----------------------------
1 | hoge1 | 2015-07-11 03:01:41.459369 | 2015-07-10 19:30:38.917108
2 | hoge2 | 2015-07-12 03:03:41.459369 | 2015-12-03 07:22:19.342057
3 | hoge3 | 2015-07-12 03:05:41.459369 | 2015-09-10 21:13:38.917108
4 | hoge4 | 2015-09-11 03:01:41.459369 | 2015-12-03 07:22:04.481084
Heroku(PostgreSQL)
id | title | created_at | updated_at
----+------------------------+----------------------------+----------------------------
1 | hoge1 | 2015-07-11 03:01:41.459369 | 2015-07-10 19:30:38.917108
3 | hoge3 | 2015-07-12 03:05:41.459369 | 2015-09-10 21:13:38.917108
4 | hoge4 | 2015-09-11 03:01:41.459369 | 2015-12-03 07:22:04.481084
2 | hoge2 | 2015-07-12 03:03:41.459369 | 2015-12-03 07:22:19.342057
原因
PostgreSQLでは、レコードを追加または更新した順序で表示している。
(追加または更新が最新のものが下にくる)
対処法
きちんと決まった順序でレコードを取得したい場合には、ORDER BYを指定してやればよい。
たとえば、idの昇順で全件取得したい場合、
hoge_controller.rb
@hoges = Hoge.all.order("id ASC")