【问题标题】:Rails currency validationRails 货币验证
【发布时间】:2015-04-23 12:45:29
【问题描述】:

如何在 Rails 中编写验证以允许以下可能的价格值

100 或 100 美元或 100.00 或 100.00 美元

我已在模型中将价格字段声明为 Float

我当前的代码如下所示:

验证 :price,numericality: true

这不允许像 100 这样的值被保存。

【问题讨论】:

  • 不要在数据库中存储货币符号。只存储号码。并在渲染时进行装饰。
  • 对于初学者,您应该使用小数 stackoverflow.com/questions/1019939/…
  • 我希望它可以节省 100 美元,但不会节省 100 美元。如果您希望用户也能够包含 $,您将不得不在验证之前对用户的输入进行一些处理。您最好在 UI 中显示货币符号,并且根本不允许用户输入它。

标签: ruby-on-rails


【解决方案1】:

您可以将format 选项添加到您的validates 方法中。

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

这将允许高达 999999.99 美元的值带有可选的小数位(如果存在小数,则后面的数字不得超过 2 位。)

但就像已经提到的其他人一样 - 将这些值保存到数据库中并不是最好的选择。

我可以向您推荐使用货币的 RubyMoney gem

【讨论】:

  • 正则表达式,包括可选的前导 $ 和可选的逗号分隔符:^\$?[0-9]{1,3}(?:,?[0-9]{3})*(?:\.[0-9]{2})?$
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-12-17
  • 1970-01-01
  • 2013-07-17
  • 1970-01-01
  • 2014-12-29
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多