0

我有一个UserUserProfile模型。目前这两款机型都具有first_name,last_nameemail的属性,它们必须相同。稍后,我将从User中删除这些属性,但目前我想要这样。 A UserProfilebelongs_to a 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?

回答

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