Frage

Ich habe einen Schienen-Helfer in meiner application_helper.rb-Datei, die wie folgt aussieht:

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

Die ‚external_links‘ Variable ist ein Hash, der aus einer externen Datei bezogen werden soll. Die Datei etwas so einfaches wie ein Rubin-Hash oder eine einfache YML Config sein kann.

Vielleicht bin ich etwas fehle - Ich dachte, ich wäre in der Lage den Hash in Ruby-Syntax in einer externen Datei und ‚require‘ es von environment.rb zu definieren, aber dass der Hash-Variable in dem Helfer nicht aussetzen .

Wie kann ich externalisieren einen Rubin Hash, so dass es „in scope“ in einer Anwendungshilfsmethode wird?

War es hilfreich?

Lösung

Verwenden Sie eine grundlegende YML Datei wie angegeben und dann laden über:

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

Dann können Sie es über das „config“ Objekt zugreifen entsprechend. Wenn die Datei doesnt zwischen Anforderungen ändern Sie diese Datei laden für eine spätere Verwendung zwischenspeichern können (so dass sie nicht auf jedem Gebrauch geöffnet und analysiert), aber das sind eine Performance-Optimierung und nicht kritisch für eine Proof-of-concept.

Andere Tipps

Ich verwende Anwendung Config , die mich RAILS_ROOT einrichten können / config / application_config.yml wie folgt aus:

  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

Dann sie wie folgt verweisen:

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

Es gibt auch die AppConfig Plugin , die noch besser aussieht, aber ich habe nicht versucht, dass noch.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top