2012-07-30 7 views
5

सारांश: मैं भीतर एक कस्टम ActiveModel::EachValidator सत्यापनकर्ता एक विशेषता के मूल्य को बदलने के लिए कोशिश कर रहा हूँ। निम्नलिखित प्रोटोटाइप को देखते हुए:बदलें या रेल ActiveRecord सत्यापन के दौरान एक विशेषता मान अद्यतन

def validate_each(record, attribute, value)

स्थापित करने के लिए value = thing कुछ भी करने को प्रकट नहीं होता है की कोशिश कर रहा - मैं कुछ याद आ रही है? ऐसा करने का एक स्मार्ट तरीका होना चाहिए ...

विवरण: मैं साइट के हिस्से के रूप में एक यूआरएल इनपुट स्वीकार करता हूं। मैं सिर्फ यूआरएल नहीं लेना चाहता हूं और सीधे यह सत्यापित करता हूं कि यह 200 OK संदेश देता है, क्योंकि इससे http से शुरू नहीं होने वाली प्रविष्टियों को अनदेखा कर दिया जाएगा, या अग्रणी www आदि छोड़ दिया जाएगा। मेरे पास कुछ कस्टम तर्क है उन त्रुटियों और पुनर्निर्देशन का पालन करें। इस प्रकार, यदि http://www.example.org/article के बजाय example.org/article में कोई उपयोगकर्ता example.org/article टाइप करता है तो मुझे पर सत्यापन करना होगा। तर्क सत्यापन के अंदर ठीक से काम करता है, लेकिन समस्या यह है कि अगर कोई पूर्व में टाइप करता है, तो डेटाबेस में संग्रहीत मूल्य अच्छी तरह से अद्यतन किए गए बजाय "गलत" रूप में होता है। क्या मैं सत्यापन के दौरान एक और कैनोलिक रूप में प्रविष्टि बदल सकता हूं?

+0

+1 अच्छा सवाल – neeraj

उत्तर

11

आपको यह करने के लिए सत्यापन छोड़ना चाहिए: मान्य करें; यह आपके मॉडल के गुणों में हेरफेर करने का सही स्थान नहीं है।

एक्टिवमोडेल before_validation कॉलबैक देखें। प्रमाणीकरण की तैयारी में मॉडल विशेषताओं में हेरफेर करने के लिए यह एक और उपयुक्त जगह है।

ऐसा लगता है कि आपको कम से कम this SO question के अनुसार कॉलबैक के बारे में अपने ActiveModel कार्यान्वयन को बताना होगा।

class YourModel 
    extend ActiveModel::Callbacks 
    include ActiveModel::Validations 
    include ActiveModel::Validations::Callbacks 

    before_validation :manipulate_attributes 

    def manipulate_attributes 
    # Your manipulation here. 
    end 
end 
+0

अच्छी कॉल पूछने के लिए - सत्यापन के दौरान चीजों को बदलने की कोशिश नहीं करते। पहले कोड में कुछ कोड जोड़ना मदद करता है, धन्यवाद! अच्छा समाधान देने के लिए – aardvarkk

+0

+1 जैसा कि मैं वही ढूंढ रहा था। – neeraj

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