2009-04-18 14 views
18

जैसा कि this article में वर्णित है, मैं फिक्स्चर में स्वचालित संघों का उपयोग कर रहा हूं। उदाहरण के लिए, यदि किसी क्षेत्र ऑब्जेक्ट में देश देश है, तो "country_id" करने के बजाय: 1, मैं "देश" करता हूं: "यूएसए"। "यूएसए" मेरे देशों में एक लेबल है। फ़ाइल फ़ाइल, इसलिए फिक्स्चर जानता है कि इसका ख्याल कैसे रखा जाए। हालांकि, यह केवल तभी काम करता है जब आप देशों के ऑब्जेक्ट के लिए आईडी मान निर्दिष्ट नहीं करते हैं। इसलिए मैं संयुक्त राज्य अमेरिका की आईडी 1 को असाइन नहीं कर सकता। लेकिन अगर मैं इसे 1 नहीं मानता, तो यह कुछ बड़े मूल्य 8974343 होने के समाप्त होता है ... जो कि अजीब है। क्या आईडी को ऑटो-जेनरेट करने के लिए फिक्स्चर प्राप्त करने का कोई तरीका है जो सुपर उच्च नहीं है? .... या यह ठीक है?रेल फिक्स्चर पर रूबी में स्वचालित संघ

उत्तर

21

एपीआई दस्तावेज पढ़ना, यह बिल्कुल ठीक है कि स्वत: जेनरेट किए गए फिक्स्चर का व्यवहार कैसे किया जाना चाहिए - यदि आप पहले से ही एक स्थिरता के लिए एक विशिष्ट आईडी मान चाहते हैं, तो आपको शायद इसे स्वयं असाइन करना चाहिए।

यदि नहीं

, ठीक है, एपीआई डॉक्स से:

The generated ID for a given label is constant, so we can discover any fixture‘s ID without loading anything, as long as we know the label. 
+0

आपको क्यों लगता है कि लोग उत्तर स्वीकार करते हैं लेकिन उन्हें वोट नहीं देते? –

3

स्थिरता के आईडी इसका नाम (hashing से सीधे आता है कि कैसे "हम हम के रूप में कुछ भी लोड किए बिना किसी भी स्थिरता की आईडी की खोज कर सकते हैं, जब तक है लेबल को जानें ")

23

इस प्रकार आप स्थिरता लेबल की स्वत: जेनरेटेड आईडी प्राप्त करते हैं।

Fixtures.identify(:reginald) 
+11

चूंकि इस SO लेख ने मुझे बहुत मदद की, मैं रेल 4.1.0.rc1 के लिए एक अद्यतन देना चाहता हूं: <% = ActiveRecord :: FixtureSet.identify (: reginald)%> – Chris

+0

मुझे कक्षा को शामिल करना था लेबल को संदर्भित किया गया। http://ruby-journal.com/rails/define-fixtures-with-polymorphic-association/ – Shadoath

13

जब से मैं टिप्पणी करने के लिए पर्याप्त प्रतिष्ठा नहीं है, यह वास्तविक रेल है 4.1 प्रलेखन:

http://edgeapi.rubyonrails.org/classes/ActiveRecord/FixtureSet.html#class-ActiveRecord::FixtureSet-label-Fixture+label+interpolation

स्थिरता लेबल प्रक्षेप के तहत:

monkey_id: <%= ActiveRecord::FixtureSet.identify(:reginald) %> 
pirate_id: <%= ActiveRecord::FixtureSet.identify(:george) %> 
1

स्वचालित परीक्षण करने के लिए लागू स्थिरता अखंडता

class FixtureIntegrityTest < ActiveSupport::TestCase 
    context "fixture integrity" do 
     should "work" do 
     fixtures = Dir["test/fixtures/*.yml"].map do |file| 
      [file, File.basename(file).sub(/\..*/, "").singularize, YAML.load(ERB.new(File.read(file)).result)] 
     end 

     failures = fixtures.reject(&:last).map { |file,*| "#{file} is empty!"} 

     failures = failures.presence || fixtures.map do |_, klass, content| 
      content.select{ |_,fixture| fixture["id"] }.map do |name, _| 
      fixtures.map do |file, _, content| 
       content.select { |_,fixture| fixture[klass] == name }.map do |_, fixture| 
       "#{file} uses #{klass}: #{name}, but should use the id!" 
       end 
      end 
      end 
     end.flatten.compact 

     assert_equal [], failures 
     end 
    end 
    end 
संबंधित मुद्दे