ActiveRecord::Enum で記事のステータスを管理する方法

✏️️ 2019/08/22 👍️2019/08/22 🔗

enumを利用して、記事をstatus管理するようにします。特定の値リストに意味をもたせて、DBに保存したいときにenumを利用します。今回の場合は

TD
0 下書き(draft)
1 公開済(published)
2 削除済(deleted)

とします。

Post モデルにstatus カラムを追加

bin/rails generate migration AddStatusToPosts status:integer

作成されたマイグレーションファイルを修正し、default: 0 null:falseを追加します。

#  db/migrate/2019_add_status_to_posts.rb
class AddStatusToPosts < ActiveRecord::Migration[6.0]
  def change
    add_column :posts, :status, :integer, default: 0, null:false
  end
end

マイグレーションを実行

bin/rails db:migrate

モデルにenumを定義

# app/models/post.rb
enum status: { draft: 0, published: 1, deleted: 2 }
validates :status, inclusion: { in: Post.statuses.keys }

validatesも記述します。

使えるようになるメソッド

enumを利用したことで以下のようなメソッドを利用できるようになります。

post.status
post.draft?
post.published?
post.published!
Post.statuses
Post.published

以上で、ActiveRecord::Enum で記事のステータスを管理する方法は完了です。

Akito
日本のスタートアップで主にRuby on Railsを使ってプロダクト開発をしています。