この記事はアピリッツの技術ブログ「DoRuby」から移行した記事です。情報が古い可能性がありますのでご注意ください。
Railsの4.1でenumが使えるようになりました。
一般的には文字列型のカラムを用意して
class User < ActiveRecord::Base
enum status: { :awake, :sleep, :dead }
end
と書いて
user = User.new(status: :awake)
user.awake? # => true
という使い方をしますが、使うカラムを数値型にすることで
class User < ActiveRecord::Base
enum status: { awake: 1, sleep: 2, dead: 99 }
end
とすると
user = User.new(status: 1)
user.awake? # => true
とかできるようになります。業務アプリで定数処理しているところが捗りますね。
さて、これのテストを書くときにfactorygirlでモデルを作ろうとして、
FacrotyGirl.define do
factory :user do
status 1
end
end
と書いたら
Failure/Error: user = build(:user)
ArgumentError:
'1' is not a valid status
とエラーが出てしまいました。困る…。
こういう場合、
FacrotyGirl.define do
factory :user do
status :awake
end
end
と名前のほうをfactoryに書けばいいです。