Rails 3: почему целочисленное поле не проверяется на регулярное выражение? - PullRequest
4 голосов
/ 11 марта 2011

Job модель имеет целое поле job_price:

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

Я хотел бы отобразить сообщение об ошибке, если пользователь вводит строки в поле job_price, поэтому я добавил следующую проверку:

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

Однако похоже, что проверка проходит, даже когда я печатаю строки.

Есть идеи, почему?


Примечание

Я должен был добавить :value => @job.job_price_before_type_cast здесь:

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

потому что, в противном случае, если я, например, набрал abc5 и затем отправил форму, Rails преобразовал ее в 5 (я полагаю, потому что job_price определяется как целое число).

Ответы [ 3 ]

6 голосов
/ 11 марта 2011

Вы можете убедиться, что это целое число в диапазоне:

validates_numericality_of :myfield, :only_integer => true
validates_inclusion_of :myfield, :in => 0..9999999999
3 голосов
/ 02 мая 2013

Рельсы 3 пути будут:

validates :myfield, :numericality => { only_integer: true }
validates :myfield, :inclusion => { :in => 1..10000 }
2 голосов
/ 11 марта 2011

ActiveModel имеет встроенный метод проверки целых чисел.

validates_numericality_of

Надеюсь, будет вести себя так, как вы хотите.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...