Overview
Rubyで、一時的なテストがしたいとかの理由で、特定のIDを配列に書かれた順番通りにfindして表示させたいということがたまにあり、そんなとき用の書き方メモです。
Detail
▼順番指定なし
普通に書くとID順とかになってしまう
順番指定なし
array = [10,2,4,7,5]
ordered_hoges = Hoge.find(array)
#=> 展開すると 2,4,5,7,10 の順になる
▼順番指定あり
sort_byでアレしてやると順番通りになる
順番指定あり
array = [10,2,4,7,5]
ordered_hoges = Hoge.find(array).sort_by{ |o| array.index(o.id)}
#️=> 展開すると 10,2,4,7,5 の順になる!
MySQLを使っている場合は、ActiveRecord経由でField関数を使って書いてもいいらしい
ref: http://qiita.com/chezou/items/8c0481044c954c4bca3b
順番指定あり/別パターン
array = [10,2,4,7,5]
ordered_hoges = Hoge.where(id: array).order("field(id, #{array.join(',')})")