在Ruby on Rails应用程序中,定义常量的最佳位置在哪里?
在Ruby on Rails应用程序中定义常量的最佳位置是什么?
在config/environment.rb中定义常量,但如果有大量的全局常量,这样做会比较混乱。考虑从YAML文件中获取常量,或者将常量保存在数据库中。
编辑:
weppos的答案是更好的答案。
将常量保存在config/initializers/*.rb文件中。
原因:
在Ruby on Rails应用程序中,我们经常需要定义一些常量,例如网站名称、API密钥等。然而,将这些常量直接放在config/environment.rb中可能会导致代码混乱,尤其是当有大量的全局常量时。因此,我们需要找到一个更好的方法来管理这些常量。
解决方法:
一种解决方法是将常量保存在YAML文件中。这样,我们可以将常量的定义与应用程序的其他部分分离,并且可以根据需要轻松修改常量的值。另一种解决方法是将常量保存在数据库中,这样我们可以在运行时动态地修改常量的值。
然而,更好的解决方法是将常量保存在config/initializers/*.rb文件中。这样做的好处是,我们可以将所有常量的定义集中在一个地方,使代码更加整洁和可维护。此外,我们可以利用Ruby的强大功能来处理常量,例如在常量定义之前执行一些逻辑。
因此,将常量保存在config/initializers/*.rb文件中是在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. 当常量具有应用程序范围时,放置在`/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
奇怪的是,这样做不起作用。尽管`constants.rb`在启动时被执行,但我无法在控制器或视图中访问`SUPER_SECRET_TOKEN`。
真有趣。谁知道在Rails中要求常量的大小写是强制执行的?
注意:在定义新常量后,请不要忘记重新启动服务器。否则,它将无法正确显示!
这不是Rails的原因,这是Ruby语言的要求。
谢谢您的答案!对于Rails 6来说,这仍然是最佳方法吗?另一个答案建议使用`config.x`:[stackoverflow.com/a/34053451/144088](https://stackoverflow.com/a/34053451/144088)