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