开发者

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.

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜