ruby-on-rails - Rails strip_insignificant_zeros 默认设置为 true

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

在我的应用程序中,99% 的时间我都想去除_insignificant_zeros。所以一直将选项传递给 number_to_currency 方法是一件痛苦的事情。我希望默认值为真。我认为这很简单,找到源代码,覆盖默认值。

因此,我创建了一个 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

最佳答案

您的方法的 - 非常出乎意料 - 问题是,对于 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

关于ruby-on-rails - Rails strip_insignificant_zeros 默认设置为 true,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36760218/

相关文章:

sql - 在 Rails 和 Postgresql 中查找带空格和不带空格的单词

ruby-on-rails - 更新所有匹配某些条件但在数据库表列中保留 "position-indexed"值的记录

ruby-on-rails - Rails 更新 4.1.0 后,next 方法 (Class.first) 不起作用

ruby-on-rails - 设计 - 在开发中跳过用户确认

ruby-on-rails - 扩展 ActiveRecord::Base

ruby-on-rails - Gemfile 中未使用的 gem 会占用 Rails 中的内存吗?

css - Bootstrap和自定义css,加载顺序误区

ruby-on-rails - rails 4 : Does Devise address session fixation by resetting session after login?

jquery - Rails - 同步 - Faye、Juggernaut、Cool.io、普通的旧 eventmachine

ruby - 在 Rails 中验证加拿大邮政编码的好方法是什么?