Question

J'ai une aide de rails dans mon fichier application_helper.rb qui ressemble à ceci:

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

L'variable "est un external_links de hachage qui doit provenir d'un fichier externe. Le fichier peut être quelque chose aussi simple que d'un hachage de rubis ou d'une simple configuration YML.

Peut-être que je manque quelque chose - je pensais que je serais capable de définir le hachage dans la syntaxe Ruby dans un fichier externe et « exiger » à partir environment.rb, mais qui ne met pas la variable de hachage dans l'aide .

Comment puis-je Externaliser un hachage rubis telle qu'elle sera « portée » dans une méthode d'aide de l'application?

Était-ce utile?

La solution

Utilisez un fichier YML de base que vous avez indiqué, puis le charger via:

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

Ensuite, vous pouvez y accéder via l'objet « config » en conséquence. Si le fichier ne marche pas le changement entre les requêtes que vous pourriez mettre en cache cette charge de fichiers pour une utilisation ultérieure (si ce ne est pas ouvert et analysé à chaque utilisation), mais c'est une optimisation des performances et non critique pour une preuve de concept.

Autres conseils

J'utiliser application Config , ce qui me permet de configurer RAILS_ROOT / config / application_config.yml comme ceci:

  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

les référencer ensuite comme ceci:

  class FooController < ApplicationController
    def index
      @base_url = property(:base_url)
    end
  end

Il y a aussi AppConfig plug-in , qui semble encore mieux, mais je ne essayé encore.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top