2012-10-07 9 views
9

एक कारखाने के भीतर, मैं वस्तु के अन्य क्षेत्रों में से किसी एक के मूल्य को कैसे संदर्भित करता हूं?, फील्ड 2 प्रारंभ करते समय फ़ील्ड 1 के मान को संदर्भित करने का कोई तरीका?

मान लीजिए अपने मॉडल विजेट दो क्षेत्रों, nickname और fullname

मेरी कारखाने के अंदर है, मैं उपयोग करने के लिए ठग एक अलग यादृच्छिक उपनाम हर बार एक कारखाने बनाई गई है बनाते हैं। (अंत में पता चला कि मुझे अनुक्रम (: उपनाम) का उपयोग करना है, अन्यथा सभी कारखानों के लिए नाम समान है।)

कुछ दावों को परीक्षण करने में आसान बनाने के लिए, मैं एक पूर्ण नाम उत्पन्न करना चाहता हूं उपनाम के आधार पर, fullname = "Full name for #{nickname}"

FactoryGirl.define do 
    factory :widget do 
    sequence(:nickname) { |n| Faker::Lorem.words(2).join(' ') } 
    sequence(:fullname) { |n| "Full name for " + ????? } 
    end 
end 

जो कुछ भी मैं कहाँ डाल की तरह कुछ ??? जाता है, मुझे उपनाम सेट किए जाने के बजाय #<FactoryGirl::Decl... मिलता है।

मैंने नाम, name.to_s, name.value की कोशिश की ... कुछ भी काम नहीं लगता है।

उत्तर

12

हां। यहाँ फैक्टरी लड़की के Getting Started doc से एक उदाहरण है:

factory :user do 
    first_name "Joe" 
    last_name "Blow" 
    email { "#{first_name}.#{last_name}@example.com".downcase } 
end 

FactoryGirl.create(:user, last_name: "Doe").email 
# => "[email protected]" 

इसके अलावा, मैं आमतौर पर config/application.rb में अलग से मेरी अनुक्रम निर्धारित,:

FactoryGirl.define do 
    sequence(:random_string) { |s| ('a'..'z').to_a.shuffle[0, 30].join } 
end 

आप एक ही करने से लाभ हो सकता है। तो फिर तुम शायद की तरह कुछ कर सकता है:

FactoryGirl.define do 
    factory :widget do 
    nickname generate(:name_faker) # assuming you had defined a :name_faker sequence 
    fullname generate("Full name for #{nickname}") 
    end 
end 
+0

कि पहली बात यह है कि मैं प्रश्न में मेरी नमूना कोड में की कोशिश की थी, लेकिन इसके बजाय # {फ़ील्ड 1} फ़ील्ड का मान उपज की, यह पैदावार किसी वस्तु # jpwynn

+0

ठीक है, मुझे याद आया। मेरा अद्यतन उत्तर देखें। –

+0

साफ चाल, मैं इसे धन्यवाद देने का प्रयास करूंगा !! – jpwynn

संबंधित मुद्दे

 संबंधित मुद्दे