The uniqueness validator of ActiveRecord में मान शून्य या खाली होने पर सत्यापन को छोड़ने के विकल्प हैं। भले ही मैं दोनों पैरामीटर को सत्य (डिफ़ॉल्ट व्यवहार) पर सेट करता हूं, फिर भी मैं सत्यापन हिट से पहले शून्य और रिक्त के साथ एक रिकॉर्ड बना सकता हूं। मैं डिफ़ॉल्ट SQlite3 डेटाबेस sqlite3-ruby (1.2.5) का उपयोग करता हूं।validates_uniqueness_of शून्य या खाली (allow_nil और allow_blank के बिना)
स्पष्टीकरण के लिए संपादित करें: यदि मैं validates_presence_of
मॉडल में जोड़ता हूं तो मुझे अपेक्षित परिणाम मिलते हैं। मैंने सोचा कि validates_uniqueness_of
का डिफ़ॉल्ट व्यवहार यह अनावश्यक बना देगा।
testcase:
rails validation_test
cd validation_test/
script/generate Model Thing identification:string
rake db:migrate
एप्लिकेशन/मॉडल की सामग्री/thing.rb:
class Thing < ActiveRecord::Base
validates_uniqueness_of :identification
end
रेल कंसोल:
script/console
Loading development environment (Rails 2.3.4)
>> Thing.create!
=> #<Thing id: 1, identification: nil, created_at: "2009-09-26 01:49:32", updated_at: "2009-09-26 01:49:32">
>> Thing.create! :identification => ""
=> #<Thing id: 2, identification: "", created_at: "2009-09-26 01:49:42", updated_at: "2009-09-26 01:49:42">
>> Thing.create! :identification => ""
ActiveRecord::RecordInvalid: Validation failed: Identification has already been taken
from /usr/lib/ruby/gems/1.8/gems/activerecord-2.3.4/lib/active_record/validations.rb:1090:in `save_without_dirty!'
from /usr/lib/ruby/gems/1.8/gems/activerecord-2.3.4/lib/active_record/dirty.rb:87:in `save_without_transactions!'
from /usr/lib/ruby/gems/1.8/gems/activerecord-2.3.4/lib/active_record/transactions.rb:200:in `save!'
from /usr/lib/ruby/gems/1.8/gems/activerecord-2.3.4/lib/active_record/connection_adapters/abstract/database_statements.rb:136:in `transaction'
from /usr/lib/ruby/gems/1.8/gems/activerecord-2.3.4/lib/active_record/transactions.rb:182:in `transaction'
from /usr/lib/ruby/gems/1.8/gems/activerecord-2.3.4/lib/active_record/transactions.rb:200:in `save!'
from /usr/lib/ruby/gems/1.8/gems/activerecord-2.3.4/lib/active_record/transactions.rb:208:in `rollback_active_record_state!'
from /usr/lib/ruby/gems/1.8/gems/activerecord-2.3.4/lib/active_record/transactions.rb:200:in `save!'
from /usr/lib/ruby/gems/1.8/gems/activerecord-2.3.4/lib/active_record/validations.rb:1059:in `create!'
from (irb):3
>> Thing.count
=> 2
क्यों पहले दो कृतियों पारित करते हैं?
धन्यवाद
+1 क्योंकि यह एक प्रश्न पूछने का एक मॉडल है। आपने स्पष्ट रूप से बताया कि आपने क्या किया, आपने क्या देखा, और आपने क्या उम्मीद की। – jdl
धन्यवाद। लेकिन ऐसा लगता है कि यह गलत समझा जाने से नहीं रोकता है। :) – Roman