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?

È stato utile?

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.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top