Frage

Ich bin auf der Suche nach einem Mechanismus, durch den Benutzerpräferenzen zu erleichtern. Ich möchte auch eine Reihe von „Master“ Prefs, die verwendet werden, wenn die aktuell angemeldeten Benutzer keine bestimmte pref gesetzt hat. Ich sehe mehrere ähnliche Fragen wie diese, aber sie scheinen in der Theorie zu bekommen, anstatt einfach eine hochwertige Lösung vorzuschlagen.

Im Grunde suche ich nach Eingang auf Management sowie Speicher - Modelle, Controller usw. Zunächst ich erwäge einfach mit einer normalisierten Tabelle von 50 + Spalten gehe (für die Leistung etc.). Allerdings plane ich verschiedene, unbekannte Vorlieben über das Hinzufügen in der Zukunft und Leistung beiseite, konnte ich mehr Spalten vorstellen, von Hand raus. Gedanken?

War es hilfreich?

Lösung

In meinem Kopf, der beste Weg, Standardwerte zu definieren und zu verwenden ist, eine andere Zeile in der Benutzereinstellungen Tabelle hinzuzufügen, und laden Sie es als Klassenvariable in Ihrem Modell. Dann die Zugriffsmethoden überschreiben die Standardwerte zu finden, wenn die Präferenz nicht gefunden wurde. So etwas wie folgt aus:

class UserPreference < ActiveRecord::Base
  # load default preferences as a class variable
  @@defaults ||= find(1).attributes

  # redefine accessors or each column to load default if nil
  column_names.each do |column|
    method_name = "#{column}_with_default".to_sym
    send :define_method, method_name do 
      value = send("#{column_without_default}") 
      case value
      when nil
        @@defaults[column]
      else 
        value
      end
    end
    alias_method_chain column, :default
  end
  ...
end

im wesentlichen der Standardeinstellungen (geladen aus Zeile 1) werden in dem Modell als eine Klassenvariable gespeichert. Alle die Accessoren werden neu definiert und Teil einer Alias-Methode Kette gemacht, so dass die Standard-zurückgegeben werden würde, wenn der zurückgegebene Wert gleich Null ist. Ich wollte den Einsatz || statt Fall, aber das würde Probleme im Fall dazu führen, dass der Benutzer eine boolean Präferenz auf false gesetzt hatte.

Edit: N. B. Ich weiß nicht, von einem guten Weg, um die Standardeinstellung zu aktualisieren, in einem App Schienen, ohne den Server neu zu starten.

Andere Tipps

Wenn Sie durch individuelle Präferenzen in der Datenbank zu manipulieren oder zu sortieren, müssen nicht, dann mögen Sie vielleicht eine einzelne Bit-Maske (integer) Spalte verwenden. Grundsätzlich ist eine Bitmaske eine Reihe von Ein / Aus-Schalter als Binärzahl dargestellt. Zum Beispiel, sagen wir, wir haben drei Einstellungen:

  1. Ansicht Abonnements
  2. Ansicht Farben
  3. volle Namen

Lassen Sie uns sagen, ein Benutzer 1 und 3 und 2 aus. Mit 1s für On- und 0er für aus, die Bitmaske hierfür lautet:

101

(on off on)

Dies wird in der Datenbank als 5 gespeichert, da 101 5 binär ist. Bitmasken sind einfach zu speichern in der Datenbank (eine einzelne Integer-Spalte verwenden) und sind einfach, wenn Sie die Operatoren (für die Zusammenführung eines Benutzers Präferenzen in den Website-Standardeinstellung) kennen zu manipulieren. Ryan Bates hat ein großes Tutorial zur Verwendung von Bitmasken in Rails: Emmbedded Vereinigung . Hoffentlich werden Sie das konkrete Beispiel Sie suchen.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top