Wie kann ich eine Schienen-Hilfsmethode mit einer Konfigurationsdatei verbessern?
-
06-09-2019 - |
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?
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.