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

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

我有一个常量数据的数组,我需要在我的应用程序中的所有控制器中可用。

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

 module MyApplication SUPER_SECRET_TOKEN = "123456" end 

然后使用MyApplication::SUPER_SECRET_TOKEN来引用常量。


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

  1. in /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 

你可以把它们放在config / environment.rb中:

 Rails::Initializer.run do |config| ... SITE_NAME = 'example.com' end 

如果你有大量的全局常量,这可能是混乱的。 考虑从YAML文件中获取资源,或将常量保存在数据库中。

编辑:

weppos的答案是更好的答案。

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