2008-12-11 14 views
21

मेरे पास कुछ डेटा है जो मैं अपने रेल ऐप में कहीं भी स्टोर करना चाहता हूं क्योंकि मैं फॉर्म फ़ील्ड जेनरेट करने के लिए इसका उपयोग करता हूं, यह सुनिश्चित करने के लिए सबमिट किए गए फॉर्म की जांच करता हूं कि उसके मान मान्य हैं, आदि। असल में, मैं डेटा चाहता हूं एक स्थान क्योंकि मैं कई स्थानों पर इसका उपयोग करता हूं।रेल में निरंतर मान

पहले, मैं अपने नियंत्रक में एक initialize विधि को परिभाषित किया गया था और उस विधि के भीतर उदाहरण चर आरंभ करता है, उदा @graph_types = ['bar', 'line']। यह एक बुरा विचार प्रतीत होता है क्योंकि वास्तव में यह सभी initialize का उपयोग किया जा रहा था (उन मानों को प्रारंभ करना) और उदाहरण चर को बाद में बदला जा सकता है, जिसे मैं नहीं चाहता।

अब, मैं स्थिरांक किसी भी विधि के बाहर मेरी नियंत्रक में परिभाषित करते हैं, सही मेरी फिल्टर के बाद शीर्ष पर है, और मैं उन्हें फ्रीज, उदा GraphTypes = ['bar', 'line'].freeze

मैं इस तरह के डेटा को कॉन्फ़िगरेशन फ़ाइल में संग्रहीत नहीं करना चाहता था क्योंकि तब मुझे फ़ाइल में पढ़ने और इसे पार्स करने के लिए एक अतिरिक्त फ़ाइल का ट्रैक रखना होगा। मैं इस डेटा को स्टोर नहीं करना चाहता था डेटाबेस क्योंकि यह ओवरकिल की तरह लगता है; मुझे Themes = ['Keynote', 'Odeo', '37 Signals', 'Rails Keynote'].freeze कहने के लिए, मेरे किसी भी स्थिरांक के साथ उपलब्ध ग्राफ प्रकारों को संयोजित करने वाले किसी भी पागल बाएं बाहरी जॉइन-प्रकार के प्रश्नों की आवश्यकता नहीं है। मैं पर्यावरण.आरबी में डेटा को स्टोर नहीं करना चाहता था क्योंकि यह डेटा केवल एक विशेष नियंत्रक से संबंधित है।

यह सब ध्यान में रखते हुए, क्या मैं इस 'रूबी मार्ग' के बारे में जा रहा हूं?

उत्तर

9

मुझे विश्वास है कि आप वर्तमान में क्या कर रहे हैं ठीक है; आपने कहा कि डेटा केवल एक नियंत्रक से संबंधित है, और इसलिए वह कहां से संबंधित है। यदि यह एकाधिक नियंत्रकों के लिए आवश्यक था, या यदि वे निरंतर मूल्यों से अधिक जटिल थे, तो अन्य दृष्टिकोण समझ सकते हैं।

4

हाँ, आप क्या कर रहे हैं ठीक है। यद्यपि यह आपके निरंतर GRAPH_TYPES को कॉल करने के लिए अधिक मूर्खतापूर्ण रूबी है।

संयोग से, मैं अपने नियंत्रकों में initialize को परिभाषित करने से बच जाएंगे। ऐसा लगता है कि इससे परेशानी हो सकती है।

1

यदि आप कुछ संसाधनों से संबंधित फॉर्म उत्पन्न कर रहे हैं तो यह मॉडल में इसे स्टोर करने के लिए एक अच्छा संस्करण होगा। आपको इसे डीबी में स्टोर करने की आवश्यकता नहीं है क्योंकि यह सरल वर्ग या आवृत्ति चर/विधियां हो सकती है।

वही विचार सत्यापन के लिए है। यदि आप संसाधन/मॉडल उदाहरणों को मान्य कर रहे हैं तो मॉडल वर्ग के अंदर सत्यापन पैरामीटर को स्टोर करना उचित विकल्प होगा।

वैसे भी, यह आपके द्वारा वर्णित किसी भी प्रकार के 'मोटी मॉडल और पतले नियंत्रक' पैटर्न के करीब होगा।

27

स्थिरांक के लिए जो वास्तव में कहीं और नहीं हैं मेरे पास एक स्टेटिकडेटा वर्ग है।

class StaticData 

    GRAPH_TYPES = ['bar', 'line'] 

    SOMETHING_ELSE = ['A', 'B'] 

    end 

तब मैं

StaticData::GRAPH_TYPES 
+2

कहाँ वर्ग रख सकता हूं? क्या आप इसे अपने मॉडल के साथ ढूंढते हैं? – ahsteele

+3

ठीक है, मैं इसे मॉडल निर्देशिका में डालता हूं, लेकिन शायद इसे lib में रखना बेहतर होगा। – user37011

3

साथ इसे पाने मैं IDBD और paradisepete साथ क्या कुछ बात से सहमत होंगे। मॉडल में स्थिरांक का उपयोग करने का सबसे अच्छा तरीका होगा ताकि नियंत्रक पतला हो और मॉडल वसा हो। Rails view tips देखें उदाहरण के लिए यदि आपके पास मेट्रिक मॉडल से जुड़े मीट्रिक नियंत्रक थे।मीट्रिक मॉडल वर्ग मीट्रिक < ActiveRecord :: बेस में GRAPHTYPES = [ 'बार', 'लाइन']

तब ध्यान में रखते हुए तुम कर सकते हो की तरह

f.select कुछ: graph_type, मीट्रिक :: GRAPHTYPES

11

वही उत्तर I wrote previously to a similar question लागू होता है और पोस्टिंग के रूप में यह उत्तर अभी भी खोज परिणामों में आता है।

नियंत्रक में निरंतर रखना कुछ समझ में आता है क्योंकि निरंतर इसके साथ सीधे संबंधित है। कॉन्स्टेंट को अन्यथा समर्पित प्रारंभकर्ता फ़ाइल में रखा जाना चाहिए: Rails.root/config/initializers/constants.rb

application.rb में सूचीबद्ध टिप्पणी के अनुसार:

# Application configuration should go into files in config/initializers 
# -- all .rb files in that directory are automatically loaded 

This is still valid as of Rails 3.

+1

साशा, आप अपने 'कॉन्फ़िगर/प्रारंभकर्ता/constants.rb' फ़ाइल में constatns को परिभाषित करने के लिए किस क्षेत्र का उपयोग करते हैं? क्या आप वैश्विक स्तर पर 'MAGIC_NUMBER = 42' डालते हैं, इसे' मॉड्यूल YourApp' ब्लॉक में लपेटें, या कुछ और? – evanrmurphy

+1

@evanrmurphy जो आपके ऊपर है। नेमस्पेस में अपने स्थिरांक को लपेटना नामकरण विवादों से बचने के लिए सबसे सुरक्षित है और स्थिरांक का उपयोग करते समय अतिरिक्त संदर्भ भी जोड़ता है, लेकिन कुछ लोग कोई नेमस्पेस (यानी वैश्विक क्षेत्र) पसंद नहीं करते हैं। – Dennis

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