रेल 3 कस्टम सत्यापनकर्ता कहाँ संग्रहीत किए जाने चाहिए?


93

मैंने देखा है कि डॉक्स / वेबसाइटें दिखाती हैं कि कस्टम वैधीक्षकों को किसी परियोजना की निर्देशिका /libया /lib/validatorsनिर्देशिका में जाना चाहिए । मैंने पाया है (किसी अन्य पोस्ट का उत्तर पढ़कर) कि वे केवल काम करते हैं config/initializers। क्या कोई जानता है, या आधिकारिक दस्तावेज के लिए एक संकेतक है जो दिखाता है कि कस्टम सत्यापनकर्ता को कहां रहना चाहिए?


जवाबों:


220

यदि आप अपने कस्टम सत्यापनकर्ताओं को रखते हैं तो app/validatorsवे आपकी config/application.rbफ़ाइल को बदलने की आवश्यकता के बिना स्वचालित रूप से लोड हो जाएंगे ।


मुझे नहीं पता कि इसके लिए आपको कुछ रत्न / कॉन्फिग जोड़ने की जरूरत है, लेकिन 3.2.8 रेल के तहत यह काम नहीं करता है। विशेष रूप से, बस अपने सत्यापनकर्ता को ऐप / सत्यापनकर्ताओं / ??? में छोड़ देना। आरबी काम नहीं करता है।
डग

17
डौग ने मान्यकर्ता फ़ाइल को उसी तरह नाम देने का प्रयास किया जिस तरह से सत्यापनकर्ता वर्ग का नाम दिया गया है लेकिन रेखांकित किया गया है: MyCoolValidator ऐप / सत्यापनकर्ताओं / my_cool_validator.rb पर जाता है
बराबर

14
@ आपको अपने सर्वर को पुनरारंभ करने की आवश्यकता है। ऑटोलैड पथ प्रारंभिककरण पर विस्तारित होते हैं इसलिए नए सबफ़ोल्डर्स को तब तक नहीं उठाया जाएगा जब तक आप ऐसा नहीं करते।
तिमो

मैं ActiveModel को भी बंद करना पसंद करता हूं :: Validations :: HelperMethods को मेरी नई मान्यता के लिए सहायक जोड़ना (उदाहरण के लिए addressValidator के लिए validates_address)। जब मैं एप और वैलिडेटर / एड्रेस_वैलिडेटर दोनों में मंकीपैच और वैलिडेटर शामिल करता हूं, तो केवल एड्रेसवैलिडेटर ऑब्जेक्ट लोड किया जाता है, न कि मंकीपैच। क्या आप लोग समान व्यवहार का अनुभव कर रहे हैं?
jshkol

1
spring stopमेरे लिए रेल 5.2 में आवश्यक था, अन्यथा इसे उठाया नहीं गया था।
जैक किन्सेला

15

यदि आप इसे अपनी /config/application.rb फ़ाइल में जोड़ते हैं:

config.autoload_paths += %W["#{config.root}/lib/validators/"]

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


9
अच्छा विचार है, लेकिन आपके कोड को कुछ सफाई की जरूरत है: config.autoload_paths += %W(#{config.root}/lib/validators/)
aNoble

6

lib/validatorsअब तक सबसे साफ लगता है। हालाँकि, आपको अपने मॉडलों से पहले उन्हें लोड करने की आवश्यकता हो सकती है, इसलिए संभवतः एक इनिशलाइज़र से।


4

यहां कस्टम सत्यापन के बारे में आधिकारिक दस्तावेज़ दिए गए हैं । AFAIK ने इसे संबंधित मॉडल में रखने के लिए एक अच्छा अभ्यास किया है।


5
जब तक वे कई मॉडलों पर लागू नहीं होते हैं, उस स्थिति में आपको उन्हें DRY रहने के लिए कहीं और रखना चाहिए।
एंड्रयू मार्शल

जो कि वे संभवतया इसलिए हैं क्योंकि अन्यथा उनके लिए एक अलग वर्ग बनाने की कोई बात नहीं है।
जकूब हैम्पल

7
@ याकूब हाँ है: सिंगल रिस्पांसिबिलिटी प्रिंसिपल
मैट्विन

2
आधिकारिक डॉक्स का लिंक टूट गया है। यहाँ उस दस्तावेज़ का वर्तमान स्थान है; guide.rubyonrails.org/…
स्टिज्नस्टर
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.