哪里是在Ruby on Rails应用程序中定义常量的最佳位置?

mla*_*bie 44 ruby ruby-on-rails constants

在Ruby on Rails应用程序中,定义常量的最佳位置在哪里?

我有一系列常量数据,我需要在我的应用程序中的所有控制器上提供.

Sim*_*tti 64

Rails> = 3,应用程序本身就是一个模块(生活在其中config/application.rb).您可以将它们存储在应用程序模块中

module MyApplication
  SUPER_SECRET_TOKEN = "123456"
end
Run Code Online (Sandbox Code Playgroud)

然后MyApplication::SUPER_SECRET_TOKEN用来引用常量.


Rails> = 2.1 && <3你应该放置它们

  1. /config/initializers当常数具有的应用范围
  2. 当常量引用特定的模型/控制器/帮助器时,您可以将其范围限定在类/模块本身中

在Rails 2.1和initializers支持之前,程序员习惯于在environment.rb中放置应用程序常量.

这是一些例子

# config/initializers/constants.rb
SUPER_SECRET_TOKEN = "123456"

# helpers/application_helper.rb
module ApplicationHelper
  THUMBNAIL_SIZE= "100x20"

  def thumbnail_tag(source, options = {})
    image_tag(source, options.merge(:size => THUMBNAIL_SIZE)
  end

end
Run Code Online (Sandbox Code Playgroud)

  • 现在这很有趣.谁知道这些常量的'大写'是在rails中强制实施的? (6认同)
  • 注意:在创建新常量后,不要忘记重新启动服务器.否则,它将无法正常显示! (5认同)
  • @NikitaRybak这不是因为Rails,它是Ruby语言的要求. (3认同)
  • 奇怪,但不起作用.虽然constants.rb是在启动时执行的,但我无法访问控制器或视图中的SUPER_SECRET_TOKEN. (2认同)

gun*_*uns 10

您可以将它们放在config/environment.rb中:

Rails::Initializer.run do |config|
    ...
    SITE_NAME = 'example.com'
end
Run Code Online (Sandbox Code Playgroud)

如果你有大量的全局常量,这可能会很混乱.考虑从YAML文件中获取,或者将常量保留在数据库中.

编辑:

weppos的回答是更好的答案.

将常量保存在config/initializers/*.rb中的文件中