在Rails 3应用程序中何处/如何编写常量

AKW*_*KWF 34 ruby-on-rails constants

可能重复:
Ruby on Rails:在哪里定义全局常量?

我有兴趣在新应用程序上执行"Rails Way".我还想在某种上下文中引用常量来使代码更具可读性.我有一个应用程序,用户可以请求访问其他用户的数据集.此AccessRequest可以具有以下状态之一:

查看拒绝批准

我可以看到这些值将来用于报告功能,所以我想让它们成为常量,以避免任何拼写或大写问题.我以为我会把它们放在config/initializers目录下的constants.rb文件中.

我想将这些称为AccessRequest :: REVIEW.因为我已经有一个名为AccessRequest的模型,将它们放在那里是否有意义?或者将它们包装在config/initializers目录中的constants.rb文件中的类中?Rails方式是哪种方式?

shi*_*ara 43

您不需要在Rails 3中使用常量.最好使用Rails :: Application单例.

在你的application.rb中,你可以定义你的constante:

module Yourapp
  class Application < Rails::Application

    config.access_request.review = 'xxx'
  end
end
Run Code Online (Sandbox Code Playgroud)

在您的代码中,您可以打电话

Yourapp::Application.config.access_request.review
Run Code Online (Sandbox Code Playgroud)

如果在每个环境中更改值,则只需在您config/environments/production.rb或其他环境中定义config.xx .

  • 那些在开发和生产之间发生变化的常量:api键,启用/禁用电子邮件或功能等等? (6认同)
  • 或者调用`Rails.application.config.access_request.review`来读取值.这样,您可以使用独立于您的应用程序名称的配置.(如果您计划重用代码,则很方便) (2认同)

小智 28

迟来的回复,但发布此答案仍然出现在搜索结果中.将常量放在模型中是有意义的,因为常量直接与它相关.使用Rails应用程序配置来存储常量是不正确的.

根据application.rb中列出的注释:

# Application configuration should go into files in config/initializers
# -- all .rb files in that directory are automatically loaded
Run Code Online (Sandbox Code Playgroud)

从Rails 3开始,这仍然有效.

  • @AKWF以这种方式使用初始值设定项时,您使用哪个范围来定义常量?例如,假设我们的初始化程序位于`config/initializers/constants.rb`中.你会把'MAGIC_NUMBER = 42`放在全局范围内,用`模块YourApp`块包装它还是别的? (6认同)