14

के साथ कई कॉलम में रेल मान्यता_uniqueness_of है मेरे पास एक मॉडल है जिसमें दो फ़ील्ड हैं, जिन्हें मैं first_name और last_name कहूंगा, और मैं यह सुनिश्चित करना चाहता हूं कि दोनों का संयोजन केस-असंवेदनशील अद्वितीय है। मैं आधे रास्ते वहाँ इस का उपयोग करके मिल गया है:मामले असंगतता

validates_uniqueness_of :first_name, :scope => :last_name 

समस्या यह है कि विशिष्टता की जांच केस संवेदी हो रहा है है, भले ही the documentation कहना है कि वह मामले डिफ़ॉल्ट रूप से असंवेदनशील होना चाहिए।

{ :first_name => 'John', :last_name => 'Smith' } 

यह अनुमति दी जाएगी:

{ :first_name => 'JOHN', :last_name => 'SMITH' } 

साथ ही किसी भी अतिरिक्त रिकॉर्ड जहां या तो पहले या अंतिम नाम के मामले में के किसी भी भिन्नता है तो एक मौजूदा रिकॉर्ड को देखते हुए। इन अभिलेखों की अनुमति क्यों दी जा रही है? मैं दोनों क्षेत्रों में एक साथ केस असंवेदनशील विशिष्टता कैसे लागू कर सकता हूं?

उत्तर

21

क्या आपने validates_uniqueness_of :first_name, :scope => :last_name, :case_sensitive => false को आजमाया था?

documentation says यह डिफ़ॉल्ट रूप से सच है।

(मुझे लगता है कि लिंक आपके द्वारा दिया गया कुछ पुरानी प्रलेखन। IIRC, पिछले कुछ वर्षों में ऐसा किया परिवर्तन के लिए डिफ़ॉल्ट। है)

+0

आप सही हैं! मुझे मिले दस्तावेज़ों से मैं गुमराह था। सेटिंग ': case_sensitive => false' ने इसे first_name के लिए काम किया है, लेकिन यह दूसरी दिशा में काम नहीं करता है। यह अभी भी '{: first_name => 'जॉन' स्वीकार करेगा,: last_name => 'SMITH'}'। क्या यह द्वि-दिशात्मक रूप से काम करने का कोई तरीका है? क्या मैं सिर्फ दो 'validates_uniqueness_of' नियमों को फ़ील्ड के साथ शामिल कर दूंगा? –

+0

मैंने दो क्षेत्रों के साथ एक और सत्यापन जोड़ने की कोशिश की। अब यह उन मामलों को पकड़ लेगा जहां खेतों में से एक अलग-अलग है, लेकिन दोनों नहीं हैं, इसलिए यह अभी भी हो रहा है: '{: first_name => 'JOHN',: last_name => 'SMITH'}'। –

+1

अगर मैं आप थे तो मैं इस बिंदु पर एक कस्टम सत्यापन विधि लिखूंगा। –

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