hotoolong's blog

RailsやVim、業務で気になったことを綴ってます

orderで特定の文字列順に並び替える

数字順で昇順、降順で並び替えるのはよくありますが、 カラムに文字列を設定してしまっていると、並び替えたくなったときにすこし不便ですね。 そんなときにはfieldを使うとうまく並び替えれます。

select 
  id, 
  name
from items
order by field(items.size, 'XL', 'LL', 'L', 'M', 'S', 'SS', 'XS')

なようなことができます。

Railsで使う場合もscopeに登録しておくと便利そうです。

scope :order_size, -> { order("field(items.size, 'XL', 'LL', 'L', 'M', 'S', 'SS', 'XS')") }