1

global_list という名前のモデルを作成しようとしています。ユーザーに関連付けられたリストと、アイテムに関連付けられた global_id を取ります。ユーザー (このオブジェクトのコールバックでリストが作成されます) とアイテム (アイテム作成へのコールバックとして global_identification が作成されます) を作成する必要があります。これらの関連付けられたオブジェクトを以前に作成しようとすると、次の解決策はどちらも機能しません。彼らはすべきですか?これを処理するより良い方法はありますか?like_item_list_id のアクセサーを作成しようとしましたが、それも機能しませんでした。

FactoryGirl.define do
  factory :global_list do
    before(:create) {
       user=FactoryGirl.create(:user)
       mi=FactoryGirl.create(:item)
    }
    list_id user.liked_list_id
    global_id mi.global_id
  end
end

ブロックは役に立ちますか?

FactoryGirl.define do
  factory :global_list do
    before(:create) {
      user=FactoryGirl.create(:user)
      mi=FactoryGirl.create(:item)
    }

    list_id { List.first.id }
    global_id { 3 } # 3 will be created at this point { mil.global_id } doesn't work
  end
end

これは FactoryGirl では不可能だと思い始めています。何か助けていただければ幸いです。

4

3 に答える 3

1

これを試して。

   FactoryGirl.define do
      factory :global_list do
        before(:create) { |list|
           user=FactoryGirl.create(:user)
           mi=FactoryGirl.create(:item)
           list.list_id = user.liked_list_id
           list.global_id = mi.global_id
        }
      end
    end

その完全にテストされていません

于 2013-10-14T16:47:50.910 に答える
1

これは FactoryGirl では完全に可能であり、実際によく使用されます。

以下のように、関連付けられたオブジェクトをファクトリに定義するのは簡単です。派手な「前」は必要ありません。

FactoryGirl.define do
  factory :global_list do
    user
    mi
    foo_attribute
    bar_attribute
  end

  factory :user do
    # blah
  end

  factory :mi do
    # blah
  end
end

上記のコードでは、FactoryGirl は最初に必要な関連オブジェクトを作成し、その ID を使用してこのオブジェクトを自動的に作成します。

于 2013-10-14T16:48:49.560 に答える
0

これはそれをしました:

FactoryGirl.define do
  factory :global_list do
    list_id { FactoryGirl.create(:user).liked_list_id }
    global_id { FactoryGirl.create(:item).global_id }
  end
end

このコンテキストでの Ruby のブロックは混乱を招きます。だから私は尋ねました:これら 2 つの FactoryGirl 宣言の実際的な違いは何ですか?

于 2013-10-15T00:41:02.940 に答える