Rails:Validates_format_of for float无法正常工作

时间:2011-11-15 14:07:23

标签: ruby-on-rails validation floating-point format

我是Ruby on Rails的新手。 我试图验证其中一个属性的格式,只输入float。

validates :price, :format => { :with => /^[0-9]{1,5}((\.[0-9]{1,5})?)$/, :message => "should be float" }

但是当我只在价格中输入字符时,它接受它并显示价格的0.0值。 任何人都可以告诉,这有什么问题或者为什么会这样?

3 个答案:

答案 0 :(得分:10)

这是我的解决方案,

validates :price,presence:true, numericality: {only_float: true}

当您填写示例7时,它会自动将值传输到7.0

答案 1 :(得分:3)

对于rails 3:

validates :price, :format => { :with => /^\d+??(?:\.\d{0,2})?$/ }, 
:numericality =>{:greater_than => 0}

答案 2 :(得分:0)

float是一个数字,正则表达式是字符串。

当您为浮点数输入字符串时,Rails会自动将其转换为0.0。

列上有默认值(0.0)吗?如果是,那么您可以尝试删除它并仅使用validates_presence_of :price


要尝试的内容:不要将字符串直接放入price列,而是将其放入price_string attr并使用before_save回调尝试将字符串转换为价格。这样的事情:

attr_accessor :price_string

before_save :convert_price_string

protected
  def convert_price_string
    if price_string
      begin
        self.price = Kernel.Float(price_string)
      rescue ArgumentError, TypeError
        errors.add(ActiveRecord::Errors.default_error_messages[:not_a_number])
      end
    end

在表单中,将text_field的名称更改为:price_string