如何在制造商的定义中使用制造商的属性?

时间:2014-10-06 10:24:17

标签: fixtures model-associations modelattribute fabrication-gem

我有UserUserProfile型号。目前,这两个模型都具有first_namelast_nameemail属性,它们必须相同。稍后我将从User中删除这些属性,但目前我希望这样。一个UserProfile belongs_to一个User。我已经定义了UserProfile制造商,如下所示:

Fabricator(:user_profile) do
  first_name { Faker::Name.first_name }
  last_name  { Faker::Name.last_name }
  email      { Faker::Internet.email }
  user       { Fabricate :user }
end

User制造商:

Fabricator(:user) do
  email         { Faker::Internet.email }
  first_name    { Faker::Name.first_name }
  last_name     { Faker::Name.last_name }
  last_login_at { Time.now }
  organization  { Fabricate :organization }
end

现在的问题是,当我制作用户个人资料时,属性不一样:

user_profile.first_name == user_profile.user.first_name # => false

在用户配置文件制作者的定义中,我试过这个,但它没有用:

user       { Fabricate :user, first_name: first_name, last_name: last_name, email: email }

如何制作具有相同属性的用户和用户个人资料,而无需使用硬编码值替换Faker?

1 个答案:

答案 0 :(得分:0)

我认为最简单的方法是稍微重新组织您的用户个人资料,并使用用户的数据来填充其字段。

Fabricator(:user_profile) do
  user
  first_name { |attrs| attrs[:user].first_name }
  last_name  { |attrs| attrs[:user].last_name }
  email      { |attrs| attrs[:user].email }
end

Fabricator(:user) do
  email         { Faker::Internet.email }
  first_name    { Faker::Name.first_name }
  last_name     { Faker::Name.last_name }
  last_login_at { Time.now }
  organization
end