如何设置rails app全局可用的常量

时间:2014-07-20 19:04:10

标签: ruby-on-rails-4

我试图定义一个可以从应用程序中的任何位置访问的全局常量。为此,我在初始化程序中使用以下内容创建了一个文件:

APP_CONFIG = YAML.load_file(Rails.root + "config/app_config.yml").with_indifferent_access

在haml视图中,我正在做这个

- if APP_CONFIG[:param]
     %b HOLA MUNDO

但是它没有定义APP_CONFIG,

我尝试在两个地方使用:

@@APP_CONFIG
@APP_CONFIG
$APP_CONFIG

没有任何作用,我也尝试过:

 module MyApp
  class Application
   APP_CONFIG = .....
  end
 end

从视图来看:

MyApp::Application::APP_CONFIG[:param]

也是一个错误     未初始化的常量MyApp :: Application :: APP_CONFIG

1 个答案:

答案 0 :(得分:1)

在模块中包装它会更好。像这样:

    require 'yaml'

    module AppConfig

      class << self
        def settings
          @settings ||= hash.with_indifferent_access
        end

        def path
          File.join(Rails.root, 'config' , 'app_config.yml')
        end

        def hash
          YAML.load_file(path)
        end
      end
    end

有了这个,你就可以做到这一点:

    puts AppConfig.settings['foo']

使用该模块,您可以通过多个步骤收集数据,并轻松测试每个步骤。扩展行为也会更容易。

我将其放在app / tools / app_config.rb

之类的内容中