बदलता है मेरे पास एक शर्त का उपयोग करके परिभाषित एक अद्वितीय बाधा है। लेकिन निम्नलिखित परीक्षा उत्तीर्ण नहीं करता है:Mongoid: प्रमाणीकरण "validates_uniqueness_of" केवल तभी ट्रिगर होता है जब विशिष्ट फ़ील्ड
class Dummy
include Mongoid::Document
field :name, :type => String
field :status, :type => Boolean
validates_uniqueness_of :name, if: :status
end
describe "UniquenessValidator" do
let!(:d1) { Dummy.create!(name: 'NAME_1', status: true) }
let!(:d2) { Dummy.create!(name: 'NAME_1', status: false) }
it "should raise an error" do
expect {
d2.status = true
d2.save!
}.to raise_error
end
end
के बाद से name_changed?
गलत है, कोई सत्यापन हो रहा है और इसलिए विशिष्टता हालत की जाँच नहीं है।
क्या यह एक बग है? या मैं कुछ भूल गया हूँ? मुझे लगता है कि प्रत्येक बार तत्व संशोधित होने पर सत्यापन चलाने से बचने के लिए यह एक अनुकूलन है।
उस स्थिति में स्थिति बदलने पर सत्यापन को ट्रिगर करने का अच्छा तरीका क्या है?
धन्यवाद!
[mongoid डॉक्स] (http://mongoid.org /en/mongoid/docs/validation.html) बताता है कि "पहले से ही जारी डेटा पर # valid का उपयोग करते समय मोंगोइड सक्रिय रिकॉर्ड से थोड़ा अलग व्यवहार करता है। सक्रिय रिकॉर्ड का # अमान्य? सभी मान्यताओं को चलाएगा जबकि मोंगोइड का # अमान्य? केवल वैधताएं चलाएगा दस्तावेज जो स्मृति में अनुकूलन के रूप में हैं। " शायद यह मदद करता है। –
@ p11y: वास्तव में (https://github.com/mongoid/mongoid/blob/3.1.0-stable/lib/mongoid/validations/uniqueness.rb#L289)। हमम ... – Aymeric
गंदा वर्कअराउंड: मॉडल def attribute_changed? (attr) अगर attr == 'name' और self.status_changed में ओवरराइड करें? सच अन्य सुपर अंत अंत – Aymeric