2016-11-27 20 views
1

属性として列挙型を持つモデルがあります。Rails 4:FactoryGirl属性で列挙型フィールドを設定する

class ApplicationLetter < ActiveRecord::Base 
    belongs_to :user 
    belongs_to :event 

    validates :user, :event, presence: true 

    enum status: {accepted: 1, rejected: 0, pending: 2} 

end 

と同様に、このモデルを生成し、列挙型、私は工場

let(:valid_attributes) { FactoryGirl.build(:application_letter).attributes } 

を通じて有効な属性を取得したいコントローラーのテストで

FactoryGirl.define do 
    factory :application_letter do 
    motivation "motivation" 
    user 
    event 
    status :accepted 
    end 
end 

の値を設定します工場これらの属性を持つアプリケーションを作成します。

application = ApplicationLetter.create! valid_attributes 

しかし、私は次のエラーを取得:

ArgumentError: '1' is not a valid status

なぜ状態が文字列として解釈されますか?工場のステータスを変更すると、同じエラーが発生しますが、適切な番号が付けられます。

+1

[Factory Girl with enum and association]の複製可能性(http://stackoverflow.com/questions/27606297/factory-girl-with-enum-and-association) –

+0

http://stackoverflow.com/questions/27606297/factory-girl-with-enum-and-associationの複製のように見えますが、そこには良い回答もありません。それでも問題がある場合は、[GitHub](https://github.com/thoughtbot/factory_girl)でこれを報告してください。 –

答えて

1
let(:valid_attributes) { FactoryGirl.build(:application_letter).attributes.merge(status: 'accepted') } 
+0

あなたの迅速な対応に感謝します。残念ながら、それは助けにはならない。エラーはまったく同じです:/ – Querenker

+0

また、どのようなタイプのデータがあなたのdbのstatusカラムに保存されていますか?それは整数フィールドです、正しい? –

+0

はい、整数です。今すぐあなたの更新された答えと私は工場でのエントリを削除する場合は動作します。ちょっとハッキリに見えますが、少なくとも動作します。ありがとうございました:) – Querenker

1

あなたはよりダイナミックにそれを行うことができます。

FactoryGirl.define do 
    factory :application_letter do 
    motivation "motivation" 
    user 
    event 
    status { ApplicationLetter.statuses.values.sample } 
    end 
end 

を、このたびにあなたが異なるステータスを取得します

ORたいあなたは理由enumのことで、整数を使用する必要が静的な値を使用している場合デフォルトの整数値を使用

関連する問題