gpt4 book ai didi

ruby-on-rails - ruby on rails 模型验证中的浮点精度

转载 作者:数据小太阳 更新时间:2023-10-29 07:12:28 25 4
gpt4 key购买 nike

我正在尝试使用正则表达式验证美元金额:^[0-9]+\.[0-9]{2}$

这工作正常,但每当用户提交表单并且美元金额以 0(零)结尾时,ruby(或 rails?)将 0 砍掉。所以 500.00 变成 500.0,因此正则表达式验证失败。

有没有办法让 ruby​​/rails 保持用户输入的格式,而不管尾随零?

最佳答案

我假设您的美元金额是小数类型。因此,用户在字段中输入的任何值在保存到数据库之前都会从字符串转换为适当的类型。验证适用于已转换为数字类型的值,因此在您的情况下,正则表达式并不是真正合适的验证过滤器。

不过,您有几种可能性可以解决这个问题:

  1. 使用validates_numericality_of。这样您就可以将转换完全交给 Rails,只需检查金额是否在给定范围内即可。
  2. 使用 validate_each 方法并自行编写您的验证逻辑(例如,检查该值是否有超过 2 位小数)。
  3. 验证attribute before it's been typecasted :

This is especially useful in validation situations where the user might supply a string for an integer field and you want to display the original string back in an error message. Accessing the attribute normally would typecast the string to 0, which isn‘t what you want.

因此,在您的情况下,您应该能够使用:

validates_format_of :amount_before_type_cast, :with => /^[0-9]+\.[0-9]{2}$/, :message => "must contain dollars and cents, seperated by a period"

但是请注意,用户可能会发现遵循严格的输入规则很乏味(例如,我真的更希望能够输入 500 而不是 500.00),并且在某些语言环境中,句点不是小数点分隔符(如果您打算将您的应用程序国际化)。

关于ruby-on-rails - ruby on rails 模型验证中的浮点精度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2766959/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com