Rails でレコード取ってくるとき普段は ActiveRecord を使うと思うんですけど、たまに Arel を使う場面あると思います。「このレコードだけ前に出したい」とか「このタイプのレコードは後ろに持ってきたい」みたいな場合とかに MySQL の FIELD 関数使ったり。
んですけど、いつも記法忘れちゃうのでここでメモっておきます。多分将来のオレは今のオレに感謝すると思う。
Article モデルのレコードが 100 件ある場合。
Article.order([Arel.sql('field(articles.id, ?) DESC'), [10, 11, 12]]).pluck(:id)
# => [12, 11, 10, 1, 2, 3, 4, 5, ...]
Article.order([Arel.sql('field(articles.id, ?) ASC'), [10, 11, 12]]).pluck(:id)
# => [1, 2, 3, 4, 5, ..., 98, 99, 100, 10, 11, 12]
参考文献