LoginSignup
42
37

More than 5 years have passed since last update.

指定したidの順序でデータを取得する

Last updated at Posted at 2015-07-29

レコードの並び順のデータが別テーブルにあり、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!
42
37
2

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
42
37