2015-06-14 3 views
9

क्या फैक्टरीगर्ल में डिफ़ॉल्ट विशेषता को परिभाषित करना संभव है? अगर मैं एक (जहां दोनों question_response belongs_to प्रश्न) इस तरह के कारखाने को परिभाषित:अनावश्यक सहयोग निर्माण से बचने के लिए फैक्टरीगर्ल में 'डिफ़ॉल्ट' विशेषता का उपयोग करना

factory :question_response do 
    question 
    work_history 

    trait :open do 
    question { FactoryGirl.create :question, question_type: 'open' } 
    end 
end 

यह पहले एक डिफ़ॉल्ट सवाल पैदा करेगा और उसके बाद विशेषता है, जो एक अनावश्यक ऑपरेशन है अंदर एक और बनाने जब मैं FactoryGirl.create :question_response, :open है। कर FactoryGirl.create :question डिफ़ॉल्ट विशेषता का उपयोग करेगा

factory :question_response do 
    work_history 

    trait :default do 
    question { FactoryGirl.create :question, question_type: 'yes_no' } 
    end 

    trait :open do 
    question { FactoryGirl.create :question, question_type: 'open' } 
    end 
end 

और फिर, लेकिन यह संभव हो सकता है नहीं लगता है:

आदर्श रूप में मैं यह करने के लिए करना चाहते हैं।

उत्तर

2

जब मैं FactoryGirl.create कार्य करें: question_response,: यह पहली बार एक डिफ़ॉल्ट सवाल पैदा करेगा खोलें और फिर विशेषता

यह सच नहीं है अंदर एक और पैदा करते हैं। यदि आप question के साथ विशेषता निर्दिष्ट करते हैं, तो यह सृजन से पहले कारखाने के व्यवहार को ओवरराइट कर देगा ताकि यह एक डिफ़ॉल्ट प्रश्न नहीं बना सके।

मैंने इसे फैक्टरीगर्ल v4.5.0

+0

धन्यवाद, आप ठीक हैं! मैंने अभी इसे स्वयं सत्यापित कर लिया है। मुझे आश्चर्य है कि यह हाल ही में कारखाने की लड़की में जोड़ा गया था ... –

0

आपका विशेषता एक 2 रिकॉर्ड पैदा कर रही है, क्योंकि आप एक ब्लॉक है कि एक रिकॉर्ड बनाया है:

trait :open do 
    question { FactoryGirl.create :question, question_type: 'open' } 
end 

इसके बजाय प्रश्न प्रकार सेट है कि प्रश्न पर एक विशेषता को परिभाषित है, और फिर है, तो आप कर सकते हैं अपने question_response उस प्रश्न का उपयोग खुले गुण के साथ अपने डिफ़ॉल्ट के रूप में करता है।

factory.define :question do 
    trait :open do 
    question_type 'open' 
    end 
end 

factory.define :question_response do 
    association :question, :open 
end 
संबंधित मुद्दे