2012-11-14 17 views
9

एक स्थिर डेटा सेट (गैर गतिशील) को संभालने का सबसे अच्छा तरीका क्या है?रेल स्थिर डेटा सेट

उदाहरण के लिए, मान लें कि आपके पास एक मॉडल है जिसमें 10 अलग-अलग उदाहरणों का एक सेट है, जिनमें से प्रत्येक अद्वितीय है, लेकिन इनमें से कोई भी आपके आवेदन के पूरे जीवनकाल में कभी भी नहीं बदलेगा। ऐसा लगता है कि एक सक्रियरेकॉर्ड मॉडल बनाने और डेटाबेस में इस डेटा को स्टोर करने के लिए ओवरकिल लगता है, लेकिन यह एक सामान्य वर्ग बनाने के लिए बदसूरत लगता है और कोड में इस डेटा को स्टोर करता है।

सर्वोत्तम अभ्यास के रूप में क्या स्वीकार किया जाता है?


उदाहरण:

आप एक दर और एक उपयोगकर्ता। एक उपयोगकर्ता के पास 1-10 से स्तर हो सकता है, जब स्तर बदलता है, दर बदल जाती है। इस दर में अन्य जानकारी हो सकती है, इसलिए इसे उपयोगकर्ता पर एक विशेषता के रूप में संग्रहीत करना इसके लायक होने से अधिक परेशानी हो सकती है। यह एक दर करने के लिए इसे टाई फ़ायदेमंद होगा या इस तरह उपयोगकर्ता पर एक तरीके के रूप में बनाने के लिए:

def rate 
    case self.level 
    when 1: 
    { value: "foo", something: "bar", else: "baz" } 
    when 2: 
    # etc 
    end 
end 

ऐसा लगता है कि कोई भी समाधान आदर्श रहे हैं, लेकिन मुझे यकीन है कि नहीं कर रहा हूँ अगर वहाँ कुछ है और आदर्श जो हो सकता है।

उत्तर

1

मैं इस जानकारी को वाईएएमएल फ़ाइल में संग्रहीत करूंगा। आप RailsConfig gem का उपयोग करें और

level: 
    1: 
    some: value 
    another: value 
    2: 
    some: second value 
    another: second value 

की तरह एक YAML फ़ाइल बनाने और फिर

rate = 2 
val = Settings.level[rate.to_s].some 

साथ इसे उपयोग (मैं YAML में कुंजी के रूप में संख्या के साथ पूरी तरह से यकीन नहीं कर सकता है, हो सकता है कि आप उन्हें बचने के लिए है)

0

मैं इस मामलों में स्थिरांक का उपयोग करें: स्थिरांक घोषणा के बाद बदल नहीं है, लेकिन घोषणा गतिशील हो सकता है: क्योंकि वे memoized किया जाना चाहिए जब स्थिर मूल्यों के लिए स्थिरांक का उपयोग कर

OS = 
    case RUBY_PLATFORM 
    when /linux/ then :linux 
    when /osx/  then :osx 
    when /windows/ then :windows 
    else    :unknown 

प्रदर्शन बेहतर होना चाहिए, (और क्योंकि स्थैतिकता उनका उद्देश्य होना चाहिए, इसलिए शायद रूबी कार्यान्वयन इसके बारे में भरोसा करते हैं; मैंने जेआरबी और स्थिरांक कार्यान्वयन के बारे में कुछ पढ़ा है, अगर मैं पाउंगा तो मैं इसे पोस्ट करूंगा। EDIT मुझे यह मिला: http://blog.headius.com/2012/09/avoiding-hash-lookups-in-ruby.html)।