0

在我的应用程序中,我有一个User模型那个has_one Profile模型。然后我有一个Service模型。belongs_toUser

我正在尝试使用 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

那也没有用。

4

1 回答 1

0

为什么您的个人资料 id=2 在您的第二个示例中?看起来您正在创建两个配置文件。

老实说,我通常通过 id 而不是关联的模型来设置它,并且没有遇到过这个问题(比如 profile_id 而不是 profile)。你也可能想检查脏?对象的价值。

于 2013-07-19T05:07:07.613 回答