0

誰もがこれを通過しましたか?ネストされたフォームのファクトリを設定する

シーンは、ユーザーの作成、上のネストされた形である:

  1. ユーザーhas_oneのプロフィール
  2. プロフィールユーザー

はそう私の工場は、このように構成されてbelongs_toのが、私が実行したときテストを実行すると、この結果が表示されます。

Failure/Error: user_attributes[:user_attributes][:profile_attributes] = Factory.attributes_for :profile 
    NoMethodError: 
     undefined method `[]=' for nil:NilClass 

工場

Factory.define :user do |f| 
    f.after_build do |user| 
    f.email     '[email protected]' 
    f.password    'password' 
    f.password_confirmation 'password' 
    user.profile ||= Factory.build(:profile, :user => user) 
    end 
end 

Factory.define :profile do |f| 
    f.after_build do |profile| 
    profile.user ||= Factory.build(:user, :profile => profile) 

    f.nome   'alguem' 
    f.sobrenome  'alguem' 
    f.endereco  'rua x' 
    f.numero  '95' 
    f.genero  'm' 
    f.complemento 'casa' 
    f.bairro  'bairro x' 
    f.cidade  'cidade x' 
    f.estado  'estado x' 
    f.cep   '232323' 


end 

end 

Users_spec

describe "CreateUsers" do 

    before :each do 

     user_attributes = Factory.attributes_for :user 
     user_attributes[:user_attributes][:profile_attributes] = Factory.attributes_for :profile 

    @user = User.new(user_attributes) 

    end 
+1

user_attributes [:user_attributes] [:profile_attributes]を割り当てる前にuser_attributes.inspectを呼び出せますか?あなたのエラーは、user_attributes [:user_attributes]がnilであることを示しているので、[:profile_attributes]でインデックスを作成しようとすると、[] =をnil値に使用しています。 –

答えて

1

、新しいFactoryGirlの構文を使用して、それをこのように構築してみてください、あなたがユーザーを作成するときに、プロファイルを作成し、自動しようとしていると仮定すると:

工場ファイル:

FactoryGirl.define do 
    factory :user do 
    email     '[email protected]' 
    password    'password' 
    password_confirmation 'password' 
    after_build do |profile| 
     user.profile << FactoryGirl.build(:profile, :user => user) 
    end 
    end 

    factory :profile do 
    nome   'alguem' 
    sobrenome  'alguem' 
    endereco  'rua x' 
    numero  '95' 
    genero  'm' 
    complemento 'casa' 
    bairro  'bairro x' 
    cidade  'cidade x' 
    estado  'estado x' 
    cep   '232323' 
    user 
    end 
end 

プロファイルファクトリにuserを追加すると、プロファイルレコードに関連付けが定義されていることに注意してください。ユーザーの工場が:userと指定されている場合は、引数を渡す必要はありません。

その後、

@user = FactoryGirl.build(:user) 

を呼び出すことができる必要があり、それがユーザーとプロファイルの両方を構築します。あなたは@user.profileを呼び出してプロフィールを見ることができます。

@user = FactoryGirl.create(:user)を呼び出すと、ユーザーとプロファイルの両方が作成され、user_idがプロファイルレコードに挿入されます。

+0

興味深い!ええ、それは本当です、非常にnmottに感謝します。 – dcalixto

関連する問題