Come posso migliorare un metodo di supporto rotaie con un file di configurazione?
-
06-09-2019 - |
Domanda
Ho un aiutante rotaie nel mio file application_helper.rb che assomiglia a questo:
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
I variabile 'external_links' è un hash che dovrebbe essere di provenienza da un file esterno. Il file può essere qualcosa di semplice come un hash rubino o una semplice configurazione YML.
Forse mi manca qualcosa - ho pensato che sarei in grado di definire l'hash nella sintassi Ruby in un file esterno e 'require' da environment.rb, ma questo non esporre la variabile hash nel helper .
Come posso esternare un hash rubino tale che sarà "portata" in un metodo di applicazione di supporto?
Soluzione
Usa un file di base YML come hai indicato e poi caricarlo tramite:
config = YAML::load_file(RAILS_ROOT+'/config/external_urls.yml')
Quindi è possibile accedervi tramite l'oggetto "config" di conseguenza. Se la modifica del file doesnt tra le richieste si potrebbe memorizzare nella cache questo carico di file per un uso successivo (quindi non è aperto e analizzato in ogni utilizzo), ma questo è un ottimizzazione delle prestazioni e non critica per un proof-of-concept.
Altri suggerimenti
applicazione Config , che mi permette di impostare RAILS_ROOT / config / application_config.yml in questo modo:
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
Poi farvi riferimento in questo modo:
class FooController < ApplicationController
def index
@base_url = property(:base_url)
end
end
C'è anche il AppConfig plug , che sembra ancora meglio, ma non ho provato ancora.