レコードの並び順のデータが別テーブルにあり、orderで順序指定ができない場合、
activerecord経由でwhere inで取得しても配列の順序通りには当然の如くならない。
(なってくれるといいんだけどな。)
以下のコードでは当然の如くidsの配列の順序にはならない。
ids = [2,1,4]
arctile = Article.where(id:ids)
#=> id:1,id:2,id:4...
MySQLなら下記のSQLで指定した順序で可能。
SELECT id FROM model
WHERE id IN (2,1,4)
ORDER BY FIELD(id,2,1,4)
とはいっても、DBがmysqlとは限らないので、プログラムで並び替える方が楽。
ids = [2,1,4]
arctiles = Article.where(id:ids)
ordered_article = ids.collect {|id| articles.detect {|x| x.id == id.to_i}}
上記だと、idsで指定したものが見つからなかったものはnilとなるので、配列のnil要素を削除。
ordered_article.compact!