2013-03-25 68 views
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,配置,初始化?然後你如何正確使用它?

感謝

+0

可能的重複http://stackoverflow.com/questions/3598785/where-to-put-global-variables-in-rails-3 – 2013-03-25 20:53:47

+0

這可能是你需要放在一個YAML文件,並使用初始值設定項加載它。 – 2013-03-25 20:57:13

+0

你將如何在YAML中定義這種類型的變量?還有任何性能問題? – AnApprentice 2013-03-25 20:58:25

回答

2

有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 } 

OR它,你想去的配置路線:

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

,你會使用這樣的:

Rails.configuration.personal_domains 

個人而言,我儘量保持簡單,將與不斷走。

1

可以在application.rb中定義這個,如果你想它適用於整個應用程序。

例如,如果你定義下

module MyApp 
    class Application < Rails::Application 

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

的東西,然後再可以稱其爲MyApp的::應用:: PERSONAL_DOMAINS

如果這是你真正想要的。但是,最好設置一個初始化文件來執行此操作,並將其保存在一個地方,方便更改。