2

したがって、いくつかの関連付けを持つユーザーを生成するファクトリがあります。ケースごとに新しいファクトリを作成する代わりに、オブジェクトを作成し、関連付けオブジェクトのいくつかの属性を変更したいと考えています。

let(:user) do
    user = FactoryGirl.create(:user_with_associations)
    user.associations.where(some_id: user.default_thing.id).first.some_attribute = Time.now
    user.save
    user
end

puts user.associations.to_yamlしかし、ブロックを呼び出すとit、更新された属性がありませんsome_attribute = Time.now

私は何が欠けていますか?ありがとう。

4

1 に答える 1

2

いくつかの提案...

まず、FactoryGirl の強みに逆らっているようですね。IMHO のより良いアプローチは、カスタマイズ コードをファクトリに移動することです。たとえば、構築するものすべてに対して FactoryGirl ファクトリを定義します。

例:

 let(:user){ FactoryGirl.create(:user_with_time_now) }

これは、FactoryGirl IMHO の要点です。

次に、Rails と ActiveRecord を使用している場合は、関連付けについて :inverse_of を調べます。これらは、関連付けが元のオブジェクトにループバックする必要があることを ActiveRecord に伝えます。

于 2012-12-21T07:16:31.987 に答える