2016-04-21 63 views
3

在我的应用99%的时间内我想strip_insignificant_zeros。因此,继续将选项传递给number_to_currency方法是一种痛苦。我想默认为true。我想这将是直截了当的,找到源代码,覆盖默认。Rails strip_insignificant_zeros默认设置为true

所以,我创建了一个config/initializers文件,并添加了以下内容,但是这个默认情况下依然存在。

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

我在这里错过了什么?铁轨和源代码的

版本我引用:http://www.rubydoc.info/docs/rails/4.1.7/ActiveSupport/NumberHelper/NumberConverter

回答

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 
相关问题