【问题标题】:Rails 3: Why integer field is not validated against regex?Rails 3:为什么整数字段没有针对正则表达式进行验证?
【发布时间】:2013-05-02 13:19:28
【问题描述】:

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 =&gt; @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 被定义为整数)。

【问题讨论】:

    标签: ruby-on-rails validation


    【解决方案1】:

    你可以确保它是一个整数并且在一个范围内:

    validates_numericality_of :myfield, :only_integer => true
    validates_inclusion_of :myfield, :in => 0..9999999999
    

    【讨论】:

    • 我发现为整数类型属性提供的数值似乎在验证之前已经四舍五入为整数,因此即使使用了:only_integer =&gt; true 选项,小数条目也被视为有效.
    【解决方案2】:

    Rails 3 方式是:

    validates :myfield, :numericality => { only_integer: true }
    validates :myfield, :inclusion => { :in => 1..10000 }
    

    【讨论】:

      【解决方案3】:

      ActiveModel 确实有一个内置的整数验证方法。

      validates_numericality_of

      希望能如你所愿。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2015-04-24
        • 2012-04-03
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-04-05
        相关资源
        最近更新 更多