Rails 货币验证

tin*_*tin 1 ruby-on-rails

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

100 或 100 美元或 100.00 或 100.00 美元

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

我当前的代码如下所示:

验证:价格,数字:true

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

cri*_*ken 5

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

validates :price, numericality: true,
          format: { with: /^\d{1,6}(\.\d{0,2})?$/ }
Run Code Online (Sandbox Code Playgroud)

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

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

我可以向您推荐用于处理货币的RubyMoney gem 。