【问题标题】:Rails remove percentage symbol for numeric validationRails 删除数字验证的百分比符号
【发布时间】:2016-05-03 21:43:33
【问题描述】:

我正在尝试验证一个数字,但通过 jquery 有一个 % 符号添加到界面

=> '10.4%'

所以当我尝试验证数字时,它说它不是数字

有没有一种 Rails 方法可以验证这一点?

我已经尝试在我的模型中这样做

 before_validation :convert_number

 private

 def convert_number
   self.number.to_f
 end

但它仍然抛出它不是数字的验证错误


【问题讨论】:

  • 你的数字类型是什么,架构中的小数或整数?

标签: ruby-on-rails ruby


【解决方案1】:

问题可能是数字的类型不是十进制。

 before_validation :convert_number

 private

 def convert_number
   self.number = number.to_d
 end

【讨论】:

  • 可以发誓我以前试过这个.....但它有效!现在我还有 10 个字段,我必须以相同的方式转换......number1、number2、number3 等在该方法中转换所有这些字段的最干方法是什么?
  • 为什么不把它从前端用 JS 转换并添加到后端验证?
【解决方案2】:

您可以修剪百分比并将其转换为带有 before_validation 的浮点数。问题是,由于您传递的是字符串,因此在实际验证之前,您必须转换为数字或浮点数。 http://api.rubyonrails.org/classes/ActiveRecord/Callbacks.html

【讨论】:

  • 如何调整百分比?
  • 我猜通过的参数是 '10%' 但它作为 10.0 保存到数据库中,所以当我尝试调用 number.chomp('%') 时,我得到了一个未定义的方法 `chomp ' for #<7f882e09b830>
【解决方案3】:

如果您无法从表单数据中删除 % 符号,我建议您将字符串强制为浮点数。

对于 Ruby 来说,字符串看起来很像一个数字,在这种情况下,强制转换效果很好。

这样做时,请确保将新值分配给属性,如下所示:

def convert_number
  self.number = self.number.to_f
end

仅以当前convert_number 中的方式强制属性不会分配强制值。

我可能会建议编写一个测试,以确保它适用于您对表单的期望值范围。

【讨论】:

  • 我已经尝试过这个并将其放入 before_validation 但它仍然会抛出一个错误,说它不是数字
  • 您能否使用此信息更新您的问题,并发布您在before_validation 回调中使用的代码?
  • self.number = number.to_f
【解决方案4】:

我认为你展示了使用这种语法:

before_validation :convert_number
private
def convert_number
  self.number = self.number.chop
end

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-10-21
    • 1970-01-01
    • 1970-01-01
    • 2019-04-29
    • 1970-01-01
    • 1970-01-01
    • 2012-03-27
    • 1970-01-01
    相关资源
    最近更新 更多