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

发布于 2024-07-27 17:32:50 字数 80 浏览 3 评论 0原文

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

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

In a Ruby on Rails application, where is the best place to define a constant?

I have an array of constant data that I need available across all the controllers in my application.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

江心雾 2024-08-03 17:32:50

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

module MyApplication
  SUPER_SECRET_TOKEN = "123456"
end

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


Rails >= 2.1 && < 您应该将它们放在

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

Rails 2.1 之前和初始化程序支持,程序员用来将应用程序常量放置在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

Rails >= 3, the application is itself a module (living in config/application.rb). You can store them in the application module

module MyApplication
  SUPER_SECRET_TOKEN = "123456"
end

Then use MyApplication::SUPER_SECRET_TOKEN to reference the constant.


Rails >= 2.1 && < 3 you should place them

  1. in /config/initializers when the constant has the applications scope
  2. when the constant refers to a specific model/controller/helper you can scope it within the class/module itself

Prior to Rails 2.1 and initializers support, programmers were used to place application constants in environment.rb.

Here's a few examples

# 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
也只是曾经 2024-08-03 17:32:50

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

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

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

编辑:

weppos 的答案是更好的答案。

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

You can place them in config/environment.rb:

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

If you have large amounts of global constants, this can be messy. Consider sourcing from a YAML file, or keeping the constants in the database.

EDIT:

weppos' answer is the better answer.

Keep your constants in a file in config/initializers/*.rb

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文