19

Ich habe derzeit die Notwendigkeit, sowohl die vom Administrator konfigurierbaren globalen Einstellungen als auch benutzerkonfigurierbare Einstellungen innerhalb einer Rails 3 App zuzulassen.Rails 3 Best Practice für Anwendungen/Benutzereinstellungen?

Gibt es irgendwelche Edelsteine ​​oder Best Practices, die für diese Situation gut funktionieren?

Ich habe ein paar Edelsteine ​​und Blogposts gefunden, aber alle stammen aus den Jahren 2006-08 und werden nicht mehr gepflegt. Irgendwelche Hinweise würden dankbar sein, danke.

Hinweis: Ich habe this question mit der serialisierten Hash-Antwort gesehen, aber in meinem speziellen Fall ist die Fähigkeit erforderlich, die Datenbank für Benutzer auf der Grundlage ihrer Einstellungen abzufragen - ich glaube nicht, dass ein serialisierter Hash in dieser Situation gut funktionieren würde.

+1

Als Follow-up, wenn Sie nur für systemweite Konfiguration suchen gibt es eine neue Option, die gut aussieht - https://github.com/paulca/configurable_engine –

+0

danke dafür, sieht aus wie ein tolles Juwel. – Pierre

+0

Mögliches Duplikat von [Ruby on Rails - Speichern der Anwendungskonfiguration] (http://stackoverflow.com/questions/2127960/ruby-on-rails-storing-application-configuration) – prograils

Antwort

19

Wie immer direkt nach der Bitte um Hilfe trägt meine Suche Früchte. Gefunden Georg Ledermann's fork of rails-settings, die aussieht, als würde es genau das tun, was ich brauche.

+4

Auch [100hz Rails 3 fork] (https: //github.com/100hz/rails-settings) –

+2

Und auch [konfigurierbare_engine] (https://github.com/paulca/configurable_engine) – wik

+2

Und [diese] (https://github.com/huacnlee/rails- settings-cached) ist eine Gabelung von 110Hz Rails-Einstellungen mit Caching :) –

4

Nicht sicher, ich würde nach einer Bibliothek für diese Funktion suchen.

Für globale Einstellungen würde ich eine config/application.yml-Datei erstellen und in environment.rb lesen und es auf eine APP_CONFIG global festlegen. Dann würde ich diese Einstellungen für jeden Benutzer außer Kraft setzen, indem ich der Benutzertabelle eine Textspalte mit JSON-kodierten Einstellungs-Hash hinzufügen würde. Fügen Sie dem Benutzermodell eine Methode hinzu, die APP_CONFIG ergreift und eine tiefe Zusammenführung der decodierten Benutzereinstellungen durchführt.

Eine andere Option wäre, eine Einstellungstabelle mit einer Spalte user_id und Spalten für jede Einstellung zu erstellen. Eine Zeile mit einer null user_id würde globale Einstellungen darstellen. Wenn für den aktuellen Benutzer eine Zeile vorhanden ist, überschreiben alle Nicht-Null-Werte die Zeile mit den globalen Einstellungen.

+0

Danke für die Antwort. Beide der oben genannten sind definitiv gültige Ansätze.Am Ende ging ich mit dem Rails 3-Fork des Rails-Settings-Gems, da es auch leicht erlaubt, Einstellungen auf mehrere Modelltypen anzuwenden (ich habe globale Einstellungen sowie Einstellungen für Admins, Benutzer und individuelle Auditions der Benutzer unter anderem). –

+1

Ich hatte eine Menge Probleme mit dem Juwel in der angenommenen Antwort in Schienen 3.2. Diese Lösung war ich in wenigen Minuten. Ich habe YAML-Serialisierung für meine Datenbankspalte gemacht und einen Initialisierer wie den hier erwähnten eingerichtet http://stackoverflow.com/questions/592554/best-way-to-create-custom-config-options-for-my-rails-app – Kansha

2

Mai auch https://github.com/railsjedi/rails_config betrachten möchten. Unter seinen vielen Funktionen:

  • Globale settings.yml
  • Per-Umgebungseinstellungen Dateien (Einstellungen/development.yml, Einstellungen/production.yml etc.)
  • Lokale Einstellungen Dateien (settings.local.yml , Einstellungen/development.local.yml, etc.)
  • Embedded ERB Unterstützung
  • Rails 3/Padrino/Sinatra Unterstützung
0

Für Schienen 4, wenn Sie mit postgresql, können Sie HStore verwenden, das ist wie ein serializable Attribut, aber Sie tun SQL-Abfragen mit ihm.

Für Schienen 3 können Sie activerecord-postgres-hstore gem.