2011-03-10 15 views
91

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

+0

कैसे [स्वीकृत उत्तर ध्वज बदलना] [http://stackoverflow.com/questions/5263239/where-should-rails-3- कस्टम- validators-be-stored/6610270#comment16660135_6610270)? – JJD

उत्तर

216

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

+0

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

+17

डौग वैधकर्ता फ़ाइल का नाम देने का प्रयास करता है वैसे ही वैधकर्ता वर्ग का नाम दिया जाता है लेकिन अंडरस्कोर किया जाता है: MyCoolValidator ऐप/वैध/my_cool_validator.rb – equivalent8

+7

पर जाता है यह मेरी राय में स्वीकार्य उत्तर होना चाहिए। – DavidJ

4

कस्टम सत्यापन के बारे में official docs यहां है। AFAIK उन्हें प्रासंगिक मॉडल में रखने के लिए एक अच्छा अभ्यास है।

+4

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

+0

जो संभवतः वे हैं, क्योंकि अन्यथा उनके लिए एक अलग वर्ग बनाने में थोड़ा सा बिंदु है। –

+7

@ जकूब हां है: एकल उत्तरदायित्व सिद्धांत – mattwynne

6

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

14

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

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

फिर रेल स्वचालित रूप से आपके प्रमाणकों लोड होगा पर शुरू (बस/config/initializers/हैं), लेकिन आप को साफ रखने के अपने वैधकर्ताओं को एक अच्छी, अच्छी तरह से नामित स्थान में रखने की संरचना।

+9

अच्छा विचार है लेकिन आपके कोड को कुछ क्लीनअप की आवश्यकता है: 'config.autoload_paths + =% W (# {config.root}/lib/validators /)' – aNoble

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