在我的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,配置,初始化程序?然后你如何正确使用它?
由于
答案 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?
我通常将它用于所有配置变量,并且效果很好!