在我的应用程序中,我有一个User
模型那个has_one
Profile
模型。然后我有一个Service
模型。belongs_to
User
我正在尝试使用 FactoryGirl 创建Profile
与默认值不同的 a,然后将 a User
(通过 FactoryGirl 创建)关联到 that Profile
,最后将其关联User
到 a Service
。
@profile_first_name = FactoryGirl.create(:profile, first_name: "UniqueFirstName")
@user = FactoryGirl.create(:user, profile: @profile_first_name)
使用调试器检查,此时一切似乎都正常。用户有正确的名字:
[#<Profile id: 1, user_id: 1, first_name: "UniqueFirstName", ...
但随后我运行代码来创建一个服务并将这个自定义用户 @user 关联到该服务:
@service = FactoryGirl.create(:service, name: "Tester Service", user: @user)
同样,使用调试器检查并查询数据库,该服务应该与 first_name = 'UniqueFirstName' 的用户相关联。相反,它具有默认配置文件(可能是因为它使用的是默认用户工厂):
#<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
那也没有用。