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 me开发者_StackOverflow中文版ssage 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).
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
Rails 3 way would be:
validates :myfield, :numericality => { only_integer: true }
validates :myfield, :inclusion => { :in => 1..10000 }
ActiveModel does have a built-in validation method for integers.
validates_numericality_of
Hopefully will behave how you want it to.
精彩评论