その他
    ホーム 技術発信 DoRuby enumで数値型カラムを作る際に、テストデータを作る時に注意すること
    enumで数値型カラムを作る際に、テストデータを作る時に注意すること
     

    enumで数値型カラムを作る際に、テストデータを作る時に注意すること

    この記事はアピリッツの技術ブログ「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に書けばいいです。