Как я могу улучшить вспомогательный метод rails с помощью конфигурационного файла?
-
06-09-2019 - |
Вопрос
У меня есть помощник rails в моем файле application_helper.rb, который выглядит следующим образом:
def external_link(name)
url = external_links[name]
if url.blank?
Rails.logger.error "No URL defined for external link [#{name}]!"
return "[URL undefined]"
end
return url
end
Переменная 'external_links' - это хэш, который должен быть получен из внешнего файла.Файл может быть чем-то таким же простым, как хэш ruby или простая конфигурация YML.
Возможно, я что-то упускаю - я думал, что смогу определить хэш в синтаксисе ruby во внешнем файле и "запросить" его из environment.rb , но это не раскрывает переменную hash в помощнике.
Как я могу экстернализировать хэш ruby таким образом, чтобы он был "в области видимости" в вспомогательном методе приложения?
Решение
Используйте базовый файл YML, как вы указали, а затем загрузите его через:
config = YAML::load_file(RAILS_ROOT+'/config/external_urls.yml')
Затем вы можете получить к нему доступ соответствующим образом через объект "config".Если файл не меняется между запросами, вы могли бы кэшировать загрузку этого файла для последующего использования (чтобы он не открывался и не анализировался при каждом использовании), но это оптимизация производительности и не критично для проверки концепции.
Другие советы
Я использую Конфигурация приложения, что позволяет мне настроить RAILS_ROOT/config/application_config.yml следующим образом:
development: &defaults
items_per_page: 25
secure_with_basic_auth: false
base_url: development.com
test:
<<: *defaults
base_url: test.com
production:
<<: *defaults
base_url: production.com
Затем ссылайтесь на них следующим образом:
class FooController < ApplicationController
def index
@base_url = property(:base_url)
end
end
Есть также Плагин AppConfig, что выглядит еще лучше, но я этого еще не пробовал.