【问题标题】:Making a variable available throughout the entire application?使变量在整个应用程序中可用?
【发布时间】:2013-03-15 12:11:36
【问题描述】:

在我的 rails 3 应用程序中,我想像这样定义一个变量:

PERSONAL_DOMAINS = %w[
  @126.com
  @163.com
  @aim.com
  @aol.com
]

然后我希望能够在 user.rb 中使用它进行如下验证:

return true if PERSONAL_DOMAINS.any? { |rule| "@#{domain}".include? rule }

我也想在其他模型中使用它。

像这样:

domain_rules = [PERSONAL_DOMAINS]
domain_rules.each { |rule| return false if !domain.match(rule).nil? }

使用 Rails,您应该在哪里以及如何定义这个 PERSONAL_DOMAINS 列表? YML,配置,初始化程序?那么如何正确使用呢?

谢谢

【问题讨论】:

  • 这可能是您需要放入 YAML 文件并使用初始化程序加载它的内容。
  • 如何在 YAML 中定义这种类型的变量?还有任何性能问题?
  • @AnApprentice 性能应该不是问题,因为它只在应用程序启动时加载。要加载 YAML 文件,请检查以下问题:stackoverflow.com/questions/592554/…

标签: ruby-on-rails ruby ruby-on-rails-3


【解决方案1】:

如果您希望它可用于整个应用程序,您可以在 application.rb 中定义它。

例如,如果您在

下定义某些内容
module MyApp
  class Application < Rails::Application

    PERSONAL_DOMAINS = %w[
      @126.com
      @163.com
      @aim.com
      @aol.com
    ]
    etc.

然后您可以稍后将其称为 MyApp::Application::PERSONAL_DOMAINS

如果那是你真正想要的。但是,最好设置一个初始化文件来执行此操作并将其保存在一个位置,易于更改。

【讨论】:

    【解决方案2】:

    你试过configatron吗?

    我通常将它用于所有配置变量,效果很好!

    【讨论】:

      【解决方案3】:

      有两种方法我会考虑这样做假设值在不同的环境中不会改变,在这两种情况下我认为你应该把它放在一个初始化器中,比如:

      config/initializers/personal_ip_addresses.rb
      

      那么你可以简单地拥有一个带有常量的文件:

        PERSONAL_DOMAINS = %w[
            @126.com
            @163.com
            @aim.com
            @aol.com
          ]
      

      您可以像上面一样简单地使用它:

      return true if PERSONAL_DOMAINS.any? { |rule| "@#{domain}".include? rule }
      

      或者你想走配置路线:

      YourApplicationClass::Application.config.personal_domains = %w[
            @126.com
            @163.com
            @aim.com
            @aol.com
          ]
      

      你会这样使用它:

      Rails.configuration.personal_domains
      

      就我个人而言,我尽量保持简单,并且会使用常量。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2017-07-02
        • 2011-04-19
        • 1970-01-01
        • 2017-04-16
        • 2020-07-27
        • 1970-01-01
        • 2019-12-22
        • 2019-06-24
        相关资源
        最近更新 更多