在整个应用程序中提供变量?

时间:2013-03-25 20:51:28

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

在我的rails 3 app中,我想定义一个如此变量:

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,配置,初始化程序?然后你如何正确使用它?

由于

3 个答案:

答案 0 :(得分:2)

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

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

我个人试着保持简单,并使用常量。

答案 1 :(得分: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 :(得分:1)

您是否尝试过configatron

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