私のアプリには、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
それもうまくいきませんでした。