2013-03-25 6 views
2

в моих рельсам 3 приложения, я хочу, чтобы определить переменную следующим образом:Сделать переменную доступной во всем приложении?

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

Затем я хочу, чтобы иметь возможность использовать это в user.rb для валидаций так:

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

I также хотят использовать его в другой модели.

Как так:

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

с Rails, где и как вы должны определить этот список PERSONAL_DOMAINS? YML, config, инициализатор? И тогда как вы используете его правильно?

Благодаря

+0

Возможный дубликат http://stackoverflow.com/questions/3598785/where-to-put-global-variables-in-rails-3 –

+0

Это, вероятно, что-то, что вам нужно положить в файл YAML и использовать инициализатор для его загрузки. –

+0

как бы вы определили этот тип переменной в YAML? Также любые проблемы с производительностью? – AnApprentice

ответ

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 } 

ИЛИ это вы хотели пойти конфигурационный маршрут:

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 :: Application :: PERSONAL_DOMAINS

Если это то, что вы действительно хотите. Однако, вероятно, лучше всего настроить файл инициализатора, чтобы сделать это, и сохранить его в одном месте, легко меняя.

1

Вы попробовали configatron?

Обычно я использую его для всех переменных конфигурации, и он отлично работает!

Смежные вопросы