2012-08-24 9 views
8

को देखते हुए दो मॉडल, चेतावनी और ज़िपकोड, जहां एक चेतावनी 1 या अधिक Zipcodes होना चाहिए:मैं फैक्टरीगर्ल के साथ नेस्टेड कारखानों को कैसे परिभाषित करूं?

class Alert < ActiveRecord::Base 
    attr_accessible :descr, :zipcode 

    has_many :zipcode 
    validates :zipcode, :length => { :minimum => 1 } 
end 

class Zipcode < ActiveRecord::Base 
    attr_accessible :zip 
    belongs_to :alert 
end 

मैं अपने FactoryGirl कारखानों कैसे लिख सकता हूँ कि इतने:

  • ज़िपकोड कारखानों के लिए अपने स्वयं में परिभाषित कर रहे हैं फ़ाइल
  • चेतावनी कारखानों को अपने स्वयं के फ़ाइल में परिभाषित कर रहे हैं
  • चेतावनी ज़िपकोड द्वारा परिभाषित कारखाने पर भरोसा कर सकते हैं?

मेरे द्वारा पढ़े गए सभी दस्तावेज और उदाहरणों में आप उम्मीद करते हैं कि आप पैरेंट फैक्ट्री फ़ाइल के अंदर निहित कक्षा को परिभाषित करें, उन्हें सभी को एक साथ दबाएं, या कुछ अन्य समझौता करें या काम करें। स्पेक कारखानों को अलग रखने के लिए कोई साफ तरीका नहीं है?

उत्तर

12

यह चाल यह सुनिश्चित करने के लिए है कि कंटेनर क्लास, यानी, इसकी परिभाषा में has_many कथन वाला एक है, फ़ैक्टरी लड़की में निहित वर्ग को सरणी के रूप में बनाता है। उदाहरण के लिए:

अपने कल्पना/कारखानों/zipcodes.rb में:

FactoryGirl.define do 
    factory :zipcode do 
    zip { 78701 + rand(99) } 
    end 
end 

और कल्पना/कारखानों/alerts.rb में:

FactoryGirl.define do 
    factory :alert do 
    zipcode { Array.new(3) { FactoryGirl.build(:zipcode) } } 
    end 
end