railsでenumを使う
modelに記述する。
class Post < ActiveRecord::Base enum status: { created: 0, drafted: 1, canceled: 2 } end
こうすることで、Post.statusesとして、各Enumにアクセスすることができる。
pry(main)> Post.statuses # => {"created"=>0, "drafted"=>1, "canceled"=>2} pry(main)> Post.statuses[:drafted] # => 1 pry(main)> @post = Post.new pry(main)> @post.status = Post.statuses[:drafted]
また、インスタンスに対して、enumの各要素をメソッドとして使用することができる。
pry(main)> @post = Post.new pry(main)> @post.status = Post.statuses[:drafted] pry(main)> @post.drafted? # => true pry(main)> @post.canceled! pry(main)> @post.canceled? # => true pry(main)> @post.drafted? # => false
modelとの関連付けはせず、Enumとしてだけ使用したい場合、
locales下のymlファイルに記述する方法もあり。
ja: Enum: status: created: 0 drafted: 1 canceled: 2
pry(main)> Enum.codes(:status) => ["created", "drafted", "canceled"]
選択肢が限られているセレクトボックスの検証とかで、inclusionと合わせて使えそう。