2010-05-25 18 views
10

Ich arbeite an einer Rails-Anwendung mit Benutzerauthentifizierung, die ein Administratorkonto bereitstellt. Innerhalb des Administratorkontos habe ich eine Seite für seitenweite Einstellungen eingerichtet.Rails-Anwendungseinstellungen?

Ich frage mich, was die Norm für die Erstellung dieser Einstellungen ist. Nehmen wir zum Beispiel an, dass eine der Einstellungen darin besteht, den Namen des Anwendungsnamens zu ändern oder eine Farbe der Kopfzeile zu ändern.

Was ich suche ist für jemanden, der den grundlegenden Prozess/Methode - nicht unbedingt spezifischen Code - erklären, obwohl das großartig wäre!

Antwort

14

Für allgemeine Anwendungskonfiguration, die in einer Datenbanktabelle gespeichert nicht benötigt werden, Ich mag eine config.yml-Datei erstellen innerhalb das Config Verzeichnis. Für Ihr Beispiel könnte es so aussehen:

defaults: &defaults 
    app_title: My Awesome App 
    header_colour: #fff 

development: 
    <<: *defaults 

test: 
    <<: *defaults 
    app_title: My Awesome App (TEST ENV) 

production: 
    <<: *defaults 

Diese Konfigurationsdatei von einem benutzerdefinierten initializer in config/initializers geladen wird:

Rails 2.x:

APP_CONFIG = YAML.load_file("#{RAILS_ROOT}/config/config.yml")[RAILS_ENV] 

Rails 3.x:

APP_CONFIG = YAML.load_file("#{Rails.root}/config/config.yml")[Rails.env] 

Sie können dann abrufen der Wert mit:

title = APP_CONFIG['app_title'] 

Siehe this Railscast für weitere Informationen.

+0

In Rails 3.x 'Rails.env' sollte statt' RAILS_ENV' verwendet werden. – Felix

6

Es ist ziemlich schön plugin/gem Settingslogic.

# app/config/application.yml 
    defaults: &defaults 
    cool: 
     saweet: nested settings 
    neat_setting: 24 
    awesome_setting: <%= "Did you know 5 + 5 = #{5 + 5}?" %> 

    development: 
    <<: *defaults 
    neat_setting: 800 

    test: 
    <<: *defaults 

    production: 
    <<: *defaults 

können Sie diese Einstellungen überall verwenden, zum Beispiel in einem Modell:

class Post < ActiveRecord::Base 
    self.per_page = Settings.pagination.posts_per_page 
    end