2011-01-24 7 views
11

मैं अभी रेल में शुरू कर रहा हूं और मुझे अभी भी सीखने की ज़रूरत है, इसलिए मैं सामान्य पूछने वाले रेल/रूबी प्रश्नों से अधिक बार स्टैक ओवरफ्लो पर होने की संभावना है।रेल में मददगार

मैं सिर्फ यह पता लगाने की कोशिश कर रहा हूं कि हेल्पर रेल में कैसे काम करते हैं। जो मैंने अभी तक देखा है, से हेल्पर्स का उपयोग दृश्यों के साथ किया जाना चाहिए और आपके नियंत्रकों के साथ इतना नहीं।

हालांकि मैं एक साधारण कार्य करना चाहता हूं जो पैराम में दिए गए उपयोगकर्ता इनपुट को मान्य करेगा (जांच करें कि कुछ पैरा निर्धारित किए गए हैं और वैकल्पिक रूप से जांचें कि उनका मान मान्य है या नहीं)।

क्या कोई मुझे बता सकता है कि इसे लागू करने का सबसे अच्छा तरीका क्या होगा? (ध्यान रखें कि मैं इसे कई अलग-अलग नियंत्रकों में उपयोग करना चाहता हूं, इसलिए इसे वैश्विक रूप से उपलब्ध होना चाहिए।)

मैंने यह भी देखा कि डिफ़ॉल्ट रूप से रेल मुख्य अनुप्रयोग फ़ोल्डर में एक lib फ़ोल्डर उत्पन्न नहीं करता है। डेवलपर्स मुख्य फ़ोल्डर में ऐप फ़ोल्डर के बाहर अपनी libs रखने के लिए हैं, या रेल पुस्तकालयों का अलग-अलग उपयोग करते हैं?

उत्तर

20

आपके सत्यापन मुद्दे के संबंध में, यह इस बात पर निर्भर करता है कि आप क्या मान्य कर रहे हैं।

यदि डेटा आपके समस्या डोमेन से ऑब्जेक्ट बनाता है, जिसे मॉडलों के रूप में भी जाना जाता है, तो आपको ActiveModel से निर्मित सत्यापनकर्ताओं का उपयोग करना चाहिए। यह शायद आपको क्या करना चाहिए, लेकिन सटीक समस्या को जानने के बिना कहना मुश्किल है। Rails Guides on Validations देखें। आप बता सकते हैं कि क्या यह खुद से पूछकर मामला है कि सत्यापन के लिए आवश्यक डेटा को संग्रहीत करने के बाद संग्रहीत किया जाएगा। यदि हां, तो यह निश्चित रूप से एक मॉडल है। इस प्रकार के डेटा का एक उदाहरण ब्राउज़र ब्लॉग से ब्लॉग पर भेजे जाने वाले ब्लॉग पोस्ट का शीर्षक और टेक्स्ट फ़ील्ड होगा।

यदि डेटा आपके मॉडल के लिए कुछ तृतीयक है, या प्रेजेंटेशन के लिए विशिष्ट है, तो आपको मददगारों का उपयोग करके ठीक होना चाहिए। आपने देखा कि मददगार ज्यादातर विचारों में उपयोग किए जाते हैं, और हालांकि यह सच है, आपको नियंत्रकों में उनका उपयोग करने से रोकने के लिए कुछ भी नहीं है, आपको केवल यह घोषणा करना होगा कि आप ActiveController#helper विधि का उपयोग करके उनका उपयोग करेंगे। ApplicationController कक्षा के अंदर, बहुत से देव सभी 0 नियंत्रकों में सभी सहायकों को शामिल करने के लिए डाल देंगे। एक बार कोड की आवश्यकता हो जाने के बाद, यह वास्तव में उस प्रदर्शन को बड़ा नहीं करता है।

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

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

lib फ़ोल्डर के बारे में आपके प्रश्न के संबंध में, यह वास्तव में कोई फर्क नहीं पड़ता। आप रूट निर्देशिका में lib फ़ोल्डर में विविध समर्थन फ़ाइलों और पुस्तकालयों को रख सकते हैं और वे आपके एप्लिकेशन (app फ़ोल्डर में फ़ाइलों) के उपयोग के लिए उपलब्ध होंगे। आप अपने कोड को प्लगइन या मणि में भी अमूर्त करना चुन सकते हैं और इसे इस तरह शामिल कर सकते हैं, जिसमें बहुत से लोग ऐसा करने का विकल्प चुनते हैं। इसके लिए मेरा सुझाव डाइविंग से पहले रत्न और प्लगइन्स की धारणा पर पढ़ना होगा।

+0

धन्यवाद hornais, बहुत उपयोगी स्पष्टीकरण! आप सही हैं कि फ्रेमवर्क को सामान्य सामान करने की बजाय मुझे इन चीजों में से बहुत कुछ करने के लिए उपयोग किया जाता है। यह समझ में आता है कि रेल आपके लिए यह करती है, मुझे बस इसका उपयोग करना होगा। मैं मॉडल स्तर पर इनपुट को प्रमाणित करने का प्रयास करूंगा। – Naatan

1

आप चाहते हैं चाहते हैं शायद एक कस्टम सत्यापनकर्ता (Rails3 में) है:

http://railscasts.com/episodes/211-validations-in-rails-3

आप या तो आपके द्वारा बनाए गए एक lib फ़ोल्डर में libs जोड़ सकते हैं या आप जोड़ना किसी फ़ाइल में config/initializers में शामिल करें। initializers निर्देशिका में फ़ाइलें स्वचालित रूप से रेल द्वारा लोड की जाती हैं।

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