2010-07-14 14 views
5

का उपयोग करके अद्वितीय विशेषताओं के साथ उदाहरण बनाना मेरे पास एक बाधा है और ग्रिड फ़ील्ड पर एक सत्यापन रखा गया है ताकि प्रत्येक अद्वितीय हो। समस्या यह है कि मेरे पास नीचे दी गई फैक्ट्री परिभाषा के साथ, मैं केवल एक उपयोगकर्ता उदाहरण बना सकता हूं, क्योंकि अतिरिक्त उदाहरण सत्यापन विफल हो जाते हैं।फ़ैक्टरी गर्ल

मैं इसे सही तरीके से कैसे करूं ताकि मार्गदर्शक क्षेत्र हमेशा अद्वितीय हो? ,

Factory.define(:user) do |u| 
    u.sequence(:guid) { |n| "key_#{n}" } 
end 

मुझे लगता है यह है कि आप कुछ इटरेटर की तरह लेकिन एक टाइमस्टैम्प है नहीं करना चाहती:

Factory.define(:user) do |u| 
    u.guid UUIDTools::UUID.timestamp_create.to_s 
end 

उत्तर

10

सामान्य तौर पर, फैक्टरी लड़की दृश्यों के साथ समस्या संबोधित करते हैं। यह आलसी विशेषताएं (जो रनटाइम के दौरान मूल्यांकन) का उपयोग किया जा सकता है:

Factory.define(:user) do |u| 
    u.guid { Time.now.to_s } 
end 

या, यह सोचते हैं कि UUIDTools :: UUID.timestamp_create एक (उम्मीद उपयुक्त रूप से प्रारूपित) टाइमस्टैम्प उत्पन्न करता है:

Factory.define(:user) do |u| 
    u.guid { UUIDTools::UUID.timestamp_create.to_s } 
end 
+2

+1 कारण ओपी को समस्या है क्योंकि ग्रिड निर्माण कोड का मूल्यांकन फैक्टरी परिभाषा समय पर किया जाता है ताकि कारखाने के प्रत्येक आमंत्रण के लिए मूल्य स्थिर हो। आपके तीन संभावित समाधानों में से तीसरा कारखाने के प्रत्येक आमंत्रण पर एक नया GUID उत्पन्न करेगा, जो लगभग निश्चित रूप से ओपी की तलाश में है। –

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