Rails strip_insignificant_zeros默认设置为true

时间:2016-04-21 05:14:56

标签: ruby-on-rails ruby-on-rails-4

在我的应用程序中99%的时间我想要strip_insignificant_zeros。因此,继续将选项传递给number_to_currency方法是一件痛苦的事。我希望默认值为true。我认为这将是直截了当的,找到源代码,覆盖默认值。

因此,我创建了一个config / initializers文件,并添加了以下内容,但默认情况下仍然存在零。

ActiveSupport::NumberHelper::NumberConverter::DEFAULTS[:currency][:format][:strip_insignificant_zeros] = true
ActiveSupport::NumberHelper::NumberConverter::DEFAULTS[:format][:strip_insignificant_zeros] = true

我在这里缺少什么?

我引用的rails和源代码版本:http://www.rubydoc.info/docs/rails/4.1.7/ActiveSupport/NumberHelper/NumberConverter

1 个答案:

答案 0 :(得分:1)

- 非常意外 - 您的方法存在的问题是number_to_currency助手在两个不同的位置实际上有两个默认设置。其中之一是您在初始化程序中正确更新的DEFAULTS常量。

但这还不够:DEFAULTS哈希是 merged,并且在语言环境中定义了格式设置。您可能没有config/locales/en.yml区域设置文件中定义的任何格式设置,但ActiveSupport中还有一个默认的区域设置文件。正如您从source code所看到的那样,strip_insignificant_zeros设置为false

此行为的另一个证据是,如果您在config/locales中放置一个新的,甚至是空的区域设置文件,例如my_locale.yml,并尝试在此区域设置下调用转换器:number_to_currency(123, locale: :my_locale),您的初始化设置实际上将有效。

因此,正确的解决方案是在您的语言环境中定义格式设置而不是初始值设定项。因此,您的语言环境中的以下最小设置应该起作用:

# config/locales/en.yml
en:
  number:
    currency:
      format:
        strip_insignificant_zeros: true