如何阻止 "number_to_currency" 方法将逗号解释为价格的小数位?

how to stop "number_to_currency" method from interpreting commas as decimal places for price?

在我的 Ruby on Rails 应用程序中,我有一个名为 Post 的模型,其中有一列名为“价格”在它的数据库中table;此列为小数类型,精度为 8,小数位为 2。

新的 Post 的表格有一个 'text_field' for :price,并且在 Post show 视图,我已将“价格”设置为以这种方式显示 ->

<p>
  <strong>Price:</strong>
  <%= number_to_currency(@post.price) %>
</p>

-我的问题:只有当用户输入值 WITHOUT 任何逗号时,Price 才会正确显示。如果用户输入包含逗号的所需数值,则 Price 最终呈现为好像他们打算输入小数;因此使显示值太低

(示例:如果用户将 67,000 作为 Price 字段的值,它将是 saved/displayed 67.00).

如何解决这个问题,即使用户在最初输入的 Price 值中包含逗号,它也能正确显示...?相反,如果用户不包含逗号,那么一种方法可以使 Show 视图的结果输出正确地使用 thousands/millions 地方的逗号设置样式......?

如果用户输入中的逗号导致问题,请将其删除。

<p>
  <strong>Price:</strong>
  <%= number_to_currency(@post.price.remove(",")) %>
</p>
# http://api.rubyonrails.org/classes/String.html#method-i-remove

对于显示,格式由 number_to_currency()locale 参数控制。 http://api.rubyonrails.org/classes/ActionView/Helpers/NumberHelper.html#method-i-number_to_currency

如果您的应用程序将被实际使用逗号作为小数点分隔符的用户使用,那么您也需要处理这种情况。

非常感谢用户 "Ruby Racer" 和 "Mark H" 引导我找到正确的解决方案!

这是新 Post 表格的更正版本:

<%= f.label :price %>
<%= f.number_field :price, step: 'any', class: "form-control" %>

这使得价格可以正确显示为小数点后两位,并且不会接受用户的逗号作为初始输入。