Forum: Rails Germany Wie Einstellungen aus Adminberei ch für ganze Anwendung speichern?

2d5c3cfe67c400588ba1e16d444159f7?d=identicon&s=25 Thomas Voigt (Guest)
on 2009-03-12 17:12
(Received via mailing list)
Hallo zusammen!

Bei einer immer weiter gewachsenen Anwendung von mir ist es mittlerweile
sinnvoll, dass es einen Admin-Bereich gibt, in dem man einige
Einstellungen machen kann. Sowas wie: Welches Header-Bild soll heute
verwendet werden, welche Liste von IDs von Beiträgen soll in einer
"featured"-Liste auf der Frontpage auftauchen und so weiter...

Bisher habe ich solche Einstellungen im Code gemacht und dann immer ein
Update committed. Damit aber auch andere die Einstellungen schnell und
ohne Programmieraufwand machen können, suche ich nach einer anderen Lösung.

Jetzt frage ich mich: Wenn ich solche Daten speichern will, wie mache
ich das sinnvoll?
Ein Model anlegen? Ist eigentlich ja etwas übertrieben?
Eine Config-Datei anlegen? Wird das kompliziert mit Lesen und Schreiben?
Oder irgendwie ganz anders?


Hat da irgendwer Erfahrungen oder einen Tipp?

Dank und
Grüße,
Thomas Voigt.
B9a027e8dc984d4db10c5f66eb55e37f?d=identicon&s=25 D. Weinand (d-w)
on 2009-03-12 19:20
(Received via mailing list)
Hatte mal hiermit [1] was gemacht. Vielleicht tuts das wie du es gerne
hättest.

[1] http://github.com/cmaggard/configatron-rails/tree/master

HTH

Thomas Voigt schrieb:
2d5c3cfe67c400588ba1e16d444159f7?d=identicon&s=25 Thomas Voigt (Guest)
on 2009-03-13 23:17
(Received via mailing list)
Danke für den Tipp. Ist aber leider nicht das, was ich gesucht hab.

Hab mich jetzt für die Lösung entschieden, die Daten in einer eigenen
Datei config.yml abzulegen.
Damit kann ich meine eigene Frage jetzt beantworten:

Laden der Config-Daten in application.rb:

  before_filter :configure_app

  def configure_app
    # read config-file
    if File.exists?("#{RAILS_ROOT}/config/app/config.yml")
      file = File.open("#{RAILS_ROOT}/config/app/config.yml")
      yaml = YAML::load(file)
      file.close
    end

    # set default values
    yaml = {} if yaml.nil? || yaml==false
    yaml['header'] = {} if yaml['header'].nil?
    yaml['header']['filename'] = 'header.png' if
yaml['header']['filename'].nil?

    # global configuration for controllers and views
    $CONFIG = yaml
  end

Zugriff in den Views:
<%= $CONFIG['header']['filename'] %>

Falls man etwas speichern will, dann geht's so:

  def save_config
    yaml = $CONFIG
    yaml['header']['filename'] = 'header2.png'

    if File.exists?("#{RAILS_ROOT}/config/app/config.yml")
      file = File.open("#{RAILS_ROOT}/config/app/config.yml", 'w')
    else
      if !File.exists?("#{RAILS_ROOT}/config/app")
        Dir.mkdir("#{RAILS_ROOT}/config/app")
      end
      file = File.new("#{RAILS_ROOT}/config/app/config.yml", 'w')
    end
    YAML::dump(yaml, file)
    file.close
  end

Weiß nicht, ob's nochmal wen beschäftigt, wollte aber nicht auf der
Lösung sitzen bleiben, wo ich die Frage gestellt hatte...

Grüße,
Thomas Voigt.



Daniel Weinand schrieb:
This topic is locked and can not be replied to.