shimgo
10/16/2016 - 4:16 AM

EnumでActiveRecordの状態を管理する

EnumでActiveRecordの状態を管理する

Rails 4.1から導入された

###定義

class Article < ActiveRecord::Base
  # enumの定義(キーと数字のハッシュを渡す。数字がDBカラムに設定される)
  enum status: { draft: 0, published: 1 }
end

定義すると以下のようなメソッドが使える

  • キー名?: そのキーの値値がセットされているか
  • キー名!: statusをそのキーの値でDBに保存する
  • statuses[:キー名]: そのキーの値を返す
  • モデルクラス.statuses: ステータス定義のハッシュを返す
  • モデルクラス.キー名.where: 検索条件を指定する
article = Article.new
article.status #=> "draft"
article.draft? #=> true
article.published!
article.status #=> "published"
Article.statuses #=> {"draft"=>0, "published"=>1}
article = Article.new(status: :published) #キーで設定も可能
Article.published.where('created_at > ?', 3.days.ago)