2

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

谢谢

4

3 回答 3

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

就我个人而言,我尽量保持简单,并且会保持不变。

于 2013-03-25T21:48:49.913 回答
1

你试过配置吗?

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

于 2013-03-25T21:29:24.663 回答
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

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

于 2013-03-25T20:55:07.790 回答