Saya memiliki bidang yang ingin saya validasi. Saya ingin kolom tersebut dapat dikosongkan, tetapi jika pengguna memasukkan data, saya ingin dalam format tertentu. Saat ini saya menggunakan validasi di bawah ini dalam model, tetapi ini tidak mengizinkan pengguna untuk membiarkannya kosong:
validates_length_of :foo, :maximum => 5
validates_length_of :foo, :minimum => 5
Bagaimana saya menulis ini untuk mencapai tujuan saya?
ruby-on-rails
ruby
validation
model
bgadoci.dll
sumber
sumber
Anda juga dapat menggunakan format ini:
validates :foo, length: {minimum: 5, maximum: 5}, allow_blank: true
Atau karena min dan max Anda sama, berikut ini juga akan berfungsi:
validates :foo, length: {is: 5}, allow_blank: true
sumber
Atau bahkan lebih ringkas (dengan sintaks hash baru), dari dokumentasi validasi :
validates :foo, length: 5..5, allow_blank: true
Batas atas mungkin harus mewakili sesuatu yang lebih berarti seperti "dalam: 5..20", tetapi hanya menjawab pertanyaan ke surat itu.
sumber
in
akan bekerja dengan string, tampaknya hanya angkavalidates :foo, length: 2..5, allow_blank: true
tetapi `length: {is: 5}` akan dilakukan dalam kasus OPDari dokumentasi validates_length_of :
validates_length_of :phone, :in => 7..32, :allow_blank => true
sumber
setiap validates_ * menerima: jika atau: kecuali opsi
validates_length_of :foo, :maximum => 5, :if => :validate_foo_condition
di mana validate_foo_condition adalah metode yang mengembalikan benar atau salah
Anda juga dapat mengirimkan objek Proc:
validates_length_of :foo, :maximum => 5, :unless => Proc.new {|object| object.foo.blank?}
sumber
validates_length_of :reason, minimum: 3, maximum: 30
rspec untuk hal yang sama adalah
it { should validate_length_of(:reason).is_at_least(3).is_at_most(30) }
sumber
Bagaimana tentang itu:
validates_length_of :foo, is: 3, allow_blank: true
sumber
Tambahkan model Anda:
validates :color, length: { is: 7 }
warna adalah string:
t.string :color, null: false, default: '#0093FF', limit: 7
sumber
Dalam model Anda misalnya
def validate errors.add_to_base 'error message' unless self.foo.length == 5 or self.foo.blanc? end
sumber