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

В моем файле application_helper.rb есть помощник по rails, который выглядит следующим образом:

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, но это не раскрывает переменную хэша в помощнике .

Как вывести хеш ruby ​​таким образом, чтобы он находился "в области видимости" в методе вспомогательного приложения?

Ответы [ 2 ]

2 голосов
/ 28 мая 2009

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

1 голос
/ 28 мая 2009

Используйте базовый YML-файл, как вы указали, а затем загрузите его через:

config = YAML::load_file(RAILS_ROOT+'/config/external_urls.yml')

Затем вы можете получить к нему доступ через объект "config" соответственно. Если файл не изменяется между запросами, вы можете кэшировать эту загрузку файла для последующего использования (поэтому он не открывается и не анализируется при каждом использовании), но это оптимизация производительности и не критично для проверки концепции.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...