2012-10-18 4 views
11

シンプルですが、これを動作させる方法を理解できませんでした。 model.rbで初期化メソッドでハッシュを取るモデルでFactoryGirlを使用するには?

:工場出荷時のファイルmodels.rb

def Model 
    attr_accessor :width, 
       :height 

    def initialize params 
    @width = params[:width] 
    @height = params[:height] 
    ... 

:ファクトリメソッドに属性を設定する

FactoryGirl.define do 
    factory :model do 
    height 5 
    width 7 
    end 
end 

wrong number of arguments (0 for 1)はせずにRubyの1.9.3での作業エラーをスローしますRailsはFactory.buildを使用しています。 FactoryGirl 4.1。

EDIT:さらに詳しい情報:RSpecのを使用して

let(:model) { FactoryGirl.build :model }

+0

これは標準のFactoryGirl定義のようです。 「Factory.build」はどのように呼び出していますか? 'after_build'や' after_create'フックを含め、あなたの工場定義の全内容を投稿できますか? –

+0

OK、完了。情報を追加しました。 –

答えて

29

これはあなたのクラスで動作するはずです:

FactoryGirl.define do 

    factory :model do 
    skip_create 

    width 5 
    height 9 

    initialize_with { new(attributes) } 
    end 
end 

からskip_createは、通常、新しいオブジェクトに呼び出され、デフォルトsave!アクションをバイパスします。

- attributesメソッドは、newに渡すことができるハッシュをinitialize_withを使用して生成します。

+0

これは空のハッシュで渡されます。 'initialize_with {{height:5、width:6}}'は適切なハッシュを渡しますが、モデルオブジェクトの代わりにファクトリがハッシュを返します。 –

+0

あなたは正しいです。ブロックを無視するべきではありません。今すぐ削除する。 –

+0

それは働いています。ありがとうございました! –

関連する問題