Ordering records in Ruby

Order by value

Assume that we have model Post

class Post < ApplicationRecord
  enumerize :state, in: %w[submitted under_review published]
end

If we order by state, it would be:

Post.all.order(:state).pluck(:state)
#=> [:published, :submitted, :under_review]

But sometimes we would like to show posts in a different order (eg showing under_review posts first, then submitted and published ). So we can do something like this:

SORT_ORDER = %w[under_review submitted published]

# Rails 7
Post.in_order_of(:state, SORT_ORDER).all

# Older versions
Post.all.sort_by{ |post| SORT_ORDER.index(post.state) }