Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Rails 3: Why integer field is not validated against regex?

Job model has an integer job_price field:

class CreateJobs < ActiveRecord::Migration
  def self.up
    create_table :jobs do |t|
      ...
      t.integer "job_price"
      ...
    end
  end
  ...
end

I would like to display an error message if user types strings in the job_price field, so I added the following validation:

class Job < ActiveRecord::Base 
  validates_format_of :job_price, :with => /\A\d{0,10}\z/, 
                      :message => "^Job Price must be valid"
  ...
end

However, it seems like the validation passes even when I type strings.

Any ideas why ?


Note

I had to add :value => @job.job_price_before_type_cast here:

f.text_field(:job_price, :maxlength => 10, 
             :value => @job.job_price_before_type_cast)

because, otherwise, if I was typing abc5, for example, and then submit the form, Rails was converted it to 5 (I guess because job_price is defined as integer).

like image 402
Misha Moroshko Avatar asked Dec 21 '22 16:12

Misha Moroshko


2 Answers

You could ensure it's an integer and in a range:

validates_numericality_of :myfield, :only_integer => true
validates_inclusion_of :myfield, :in => 0..9999999999
like image 58
Paul Schreiber Avatar answered Jan 11 '23 20:01

Paul Schreiber


Rails 3 way would be:

validates :myfield, :numericality => { only_integer: true }
validates :myfield, :inclusion => { :in => 1..10000 }
like image 24
Tombart Avatar answered Jan 11 '23 20:01

Tombart