2010-08-21 6 views
5

Ich habe eine App "rails" und im Bereich "admin" der Website möchte ich bestimmte Einstellungen wie Anzeigenschaltung oder Einbettung des Google Analytics-Tracking-Codes aktivieren/deaktivieren können.Wo sollte ich eine standortweite Konfigurationseinstellung für eine Rails-App speichern?

Gibt es eine Best Practice dafür in Rails? Ein Gedanke war das Erstellen einer Einstellungstabelle und das Speichern von Werten darin.

+0

Wie werden Sie den HTML-Code rendern? – s84

+1

Es klingt, als würden Sie Laufzeiteinstellungen bearbeiten, die wahrscheinlich in einer Datenbanktabelle enthalten sind. – meagar

+0

Sam, ich dachte, der HTML-Code würde in der Anwendungslayoutdatei gerendert werden, wahrscheinlich mithilfe einer benutzerdefinierten Hilfsmethode. – Moe

Antwort

0

Sie können Ihre Konfiguration im Verzeichnis config/ speichern. Ich kenne ein paar Anwendungen, die ihre Konfigurationen in diesem Verzeichnis speichern. (z.B. teambox.yml in Teambox).

1

Ich würde diese Informationen in einer Datenbank speichern, außer Sie haben keinen Zugriff auf eine. Wenn Sie keinen Zugriff auf eine Datenbank haben, können Sie die Datei im Ordner config speichern.

Hier ist Beispiel Controller-Code zum Lesen von und Schreiben in eine Konfigurationsdatei.

def featured_specials 
    @featured_specials = YAML::load_file("#{RAILS_ROOT}/config/featured_specials.yml") 
end 

def save_featured_specials 
    config_file = "#{RAILS_ROOT}/config/featured_specials.yml" 
    File.new(config_file, "w") unless File.exist?(config_file) 
    File.open(config_file, "w") do |f| 
    f.write(params['formvars'].to_yaml) 
    end 
    flash[:notice] = 'Featured Specials have been saved.' 
    redirect_to :action => 'featured_specials' 
end 

HINWEIS: Dieser Code könnte ziemlich sauber gemacht werden, sollte aber als anständiges Beispiel dienen.

3

Wenn du gehst nicht für Laufzeitkonfiguration, dann sind Sie so etwas wie rbates' geschicktes-config-Generator verwendet werden könnte: http://github.com/ryanb/nifty-generators

ich es einfach verwendet haben, bauen Zeitkonfigurationseinstellungen. So zum Beispiel, wenn für eine E-Commerce-Website Payment-Gateway-Anmeldeinformationen speichern, meine load_gateway_config.yml wie folgt aussehen:

require 'ostruct' 

raw_config = File.read(Rails.root + "config/gateway_config.yml") 
GATEWAY_CONFIG = YAML.load(raw_config)[Rails.env].symbolize_keys 

#allow dot notation access 
GatewayConfig = OpenStruct.new(GATEWAY_CONFIG) 

Dann eine Einstellung aus dem Config-Datei zu packen, werden Sie so etwas wie

nennen Eine andere Option ist die configuration gem, die Ihnen eine ähnliche Punktnotation bietet, aber auch erweiterte Optionen wie das Setzen von Standardwerten, und die Konfigurationsdatei ist Ruby anstelle von YAML.
GatewayConfig.username 

0

Ich habe bereits eine andere Antwort hochgestuft, aber für eine schnelle und dreckige Art können Sie eine Klassenvariable in environment.rb nach dem Block des Initialisierungscodes löschen.

Verwandte Themen