rails initialize 中的config

我们在application.rb中会使用config 进行如下类似的设置

config.i18n.default_locale = 'zh-CN'

# Configure the default encoding used in templates for Ruby 1.9.
config.encoding = "utf-8"

# Configure sensitive parameters which will be filtered from the log file.
config.filter_parameters += [:password]

而且在很多的railtie, engine中也又这样的设置,如activerecord, action_controller中都有,为什么这些config是全局共享的呢?

其实,各个railtie/engine/application 中的config都是一个Configuration实例(Railtie::Configuration,  Engine::Configuration, Application::Configuration)

但是config实例有一个共享的类变量@@options,而且通过method_missing的方式将config的设置选项设置到@@options中,这样所有的config实例间都共享,而各自的config还可以拥有自己的设置

下面是主要的代码:

module Rails
  class Railtie
    class Configuration
      def initialize
        @@options ||= {}
      end

      private
      def method_missing(name, *args, &blk)
        if name.to_s =~ /=$/
          @@options[$`.to_sym] = args.first
        elsif @@options.key?(name)
          @@options[name]
        else
          super
        end
      end
    end
  end
end

转载于:https://www.cnblogs.com/kamechen/archive/2012/05/15/2501022.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值