31

関連するモデルの属性を設定するために使用されるファクトリにパラメータを渡したいです。関連付けられたモデルは、ファクトリ内で作成されます。

結合テーブル TxLink を介してそれ自体への多対多リンクを持つトランザクション モデルがあります。link = FactoryGirl.create(:link_red_to_sub, sub: 10, red: 7)2 つの Transaction オブジェクトと、2 つをリンクする TxLink を作成する呼び出しを行います。

最後に があるため、以下の関連行でエラーが発生しますunits: sub。エラーは「特性が定義されていません」です。units: { sub }代わりに(括弧付きで)試しましたが、サイコロはありませんでした。

factory :tx_link do
    units "9.99"

    factory :link_red_to_sub do
      ignore do
        sub 0
        red 0
      end
      units { red }

      association :giver, factory: :transaction, units: sub
      association :taker, factory: :redemption, units: red
    end
  end
4

2 に答える 2

39

factory_girlのassociationヘルパーは動的プロパティ引数を取ることはできませんが、動的属性を使用して必要に応じて関連付けをインスタンス化できます。

factory :tx_link do
  units "9.99"

  factory :link_red_to_sub do
    transient do
      sub 0
      red 0
    end
    units { red }

    giver { create(:transaction, units: sub) }
    taker { create(:redemption, units: red) }
  end
end

これの唯一の欠点は、構築している戦略に関係なく、 giverand関連付けが create 戦略を使用することです。これは、本質的に、ファクトリに対して正しく機能しないことを意味します。takertx_linkattributes_forbuild_stubbedtx_link

私が提供した例では、バージョン 4.5.0 が必要です。

于 2012-05-04T17:34:05.083 に答える