Как я могу улучшить вспомогательный метод rails с помощью конфигурационного файла?

StackOverflow https://stackoverflow.com/questions/921694

Вопрос

У меня есть помощник 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, что выглядит еще лучше, но я этого еще не пробовал.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top