zoukankan      html  css  js  c++  java
  • 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
  • 相关阅读:
    Swift中的可选链与内存管理(干货系列)
    Swift中的类型转换
    Swift中类与结构的初始化
    Swift3中函数的使用
    Java常用的公共方法
    Eclipse中添加文档注释快捷键
    SVN服务器的搭建(三)
    SVN服务器的搭建(二)
    SVN服务器的搭建(一)
    多线程常见的例子
  • 原文地址:https://www.cnblogs.com/kamechen/p/2501022.html
Copyright © 2011-2022 走看看