0

Rails アプリには user と user_level があります。ユーザー has_many user_levels。次のように FactoryGirl データセットを構築します。

  factory :user_level do 
    position             "admin"
    user
  end

  factory :user do 
    login                 'testuser'
    password              "password1"

    #user_levels
    after(:build) do |user|
      user.user_levels << FactoryGirl.build(:user_level, :user => user)
    end
  end

問題は、user_level の位置をたとえば sales にリセットする方法です。以下は機能しませんでした:

  ul = FactoryGirl.attributes_for(:user_level, :position => 'admin')
  user = FactoryGirl.create(:user, :login => 'test', :password => 'password', 
                            :user_levels => ul)

エラーは「undefined method 'each'」です。に置き換えるattributes_forbuild、同じエラーが生成されます。工場の user_level の位置をリセットする正しい方法は何ですか? ありがとう。

4

2 に答える 2

1

あなたのエラーはFactoryGirlとは何の関係もありませんが、純粋なレールと関係があります。単一のモデルインスタンスを:has_manyリレーションに追加します。これは配列によって供給される必要があるため、次のことを試してください。

ul = FactoryGirl.attributes_for(:user_level, :position => 'admin')
user = FactoryGirl.create(:user, :login => 'test', :password => 'password', 
                        :user_levels => [ul])
于 2012-07-01T13:50:45.457 に答える
1

ユーザー レベルで子パラメーターをリセットするには、いくつかの方法があります。

  1. after(:build) コールバックで定義されたデフォルトの user_level を維持しながら、リセット パラメーターを使用して 2 番目のユーザー レベル (またはそれ以上) を追加しました。

以下のようにFactoryGirl:

  factory :user_level do 
    position             "admin"
    user_id               1
  end

  factory :user do 
    login                 'testuser'
    password              "password1"

    #user_levels
    after(:build) do |user|
      user.user_levels << FactoryGirl.build(:user_level, :user => user)
    end
  end

ul = FactoryGirl.build(:user_level, :position => 'sales')
user = FactoryGirl.create(:user, :user_levels => [ul])

上記で作成されたユーザーには 2 つのポジションがあり、1 つはデフォルトの「admin」、2 つ目はリセットされたポジション値を持つ「sales」のポジションです。

  1. user_level は、ユーザーの作成に入力する必要があります。すべての user_level パラメータをリセットできます。

次のように FactoryGirl (ユーザーのコールバックなし):

  factory :user_level do 
    position             "admin"
    user_id               1
  end

  factory :user do 
    login                 'testuser'
    password              "password1"
  end

ul = FactoryGirl.build(:user_level, :position => 'sales')
user = FactoryGirl.create(:user, :user_levels => [ul])

上記で作成されたユーザーは、'sales' という 1 つのポジションのみを持ちます。必要に応じて、ユーザー作成にユーザー レベルを自由に追加できます。

于 2012-07-18T17:16:45.710 に答える