0

私のアプリには、Userそのhas_one Profileモデルのモデルがあります。それから私はServiceモデルを持っbelongs_toていUserます.

FactoryGirl を使用してProfile、デフォルトとは異なるを作成し、 User(FactoryGirl を介して作成された) をそれProfileに関連付け、最後に に関連付けようとUserしていServiceます。

@profile_first_name = FactoryGirl.create(:profile, first_name: "UniqueFirstName")

@user = FactoryGirl.create(:user, profile: @profile_first_name)

デバッガーで確認すると、この時点ですべてが機能しているようです。ユーザーには正しい first_name があります。

[#<Profile id: 1, user_id: 1, first_name: "UniqueFirstName", ...

しかし、コードを実行してサービスを作成し、このカスタム ユーザー @user をサービスに関連付けます。

@service = FactoryGirl.create(:service, name: "Tester Service", user: @user)

デバッガーで確認し、データベースにクエリを実行すると、このサービスは first_name = 'UniqueFirstName' のユーザーに関連付けられる必要があります。代わりに、デフォルトのプロファイルがあります (おそらくデフォルトの User ファクトリを使用しているため):

#<Profile id: 2, user_id: 1, first_name: "John" ...

属性をオーバーライドしてファクトリを作成し、それらのファクトリを他のファクトリ内で使用する方法を知る必要があります (一般に、あらゆる種類の関係)。ここで何が欠けていますか?

参考までに、ここに私の工場があります:

#factories/profile.rb
FactoryGirl.define do
  factory :profile do
    first_name  "John"
    last_name   "Doe"
    shop_name   "Casual"
    name_layout "name"
    country     "US"
    city        "Boston"
    about <<-EOF
      Lorem ipsum dolor sit amet, consectetur adipisicing elit,
      sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.
      Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi
      ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit
      in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur
      sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt
      mollit anim id est laborum.
    EOF
  end
end


#factories/user.rb
FactoryGirl.define do
  factory :user do
    sequence(:email) {|n| "user+#{n}@example.com" }
    password 'testtest'
    password_confirmation 'testtest'

    after(:build) do |user|
      user.profile = FactoryGirl.build(:profile, user: user)
    end
  end
...
end

私が試したこと: サービスのユーザーのプロファイルを手動で設定する:

@service = FactoryGirl.create(:service, name: "Globe Tester", user: @maker1)
@service.user.profile = @profile_first_name

それもうまくいきませんでした。

4

1 に答える 1

0

2 番目の例でプロファイルが id=2 になっているのはなぜですか? 2 つのプロファイルを作成しているようです。

正直なところ、私は通常、関連付けられたモデルではなく id を介して設定し、その問題はありませんでした (profile ではなく profile_id など)。また、汚れを確認したい場合がありますか?オブジェクトの値。

于 2013-07-19T05:07:07.613 に答える