2016-04-21 65 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 
相關問題