Wie gehe ich mit Daten, die in einer Datenbank beibehalten werden muss, ist aber kein richtiges Modell, in Ruby on Rails?

StackOverflow https://stackoverflow.com/questions/114192

  •  02-07-2019
  •  | 
  •  

Frage

Stellen Sie sich eine Web-Anwendung in Ruby on Rails geschrieben. Ein Teil des Standes der Anmeldung ist in einem Stück von Daten dargestellt, die nicht die Beschreibung eines Modells passen. Dieser Zustand Descriptor muss in der gleichen Datenbank wie die Modelle beibehalten werden. Wo es von einem Modell unterscheidet, ist, dass es nur eine Instanz seiner Klasse sein muss und es muss nicht die Beziehungen zu anderen Klassen.

hat über so etwas jemand kommen?

War es hilfreich?

Lösung

Aus Ihrer Beschreibung Ich denke, die Schienen-Einstellungen Plugin sollte das tun, was Sie brauchen.

Aus der Readme-Datei:

"Einstellungen ist ein Plugin, das, Wert-Paare einfache Verwaltung einer Tabelle der globalen Schlüssel macht. Denken Sie daran, wie eine globale Hash gespeichert in Sie Datenbank, die einfach Active wie Methoden zur Manipulation verwendet. Behalte jede globale Einstellung, die Sie möchte nicht zu hart Code in Ihre Rails-Anwendung. Sie jede Art von Objekt speichern. Strings, Zahlen, Arrays oder ein beliebiges Objekt. "

http://github.com/Squeegy/rails-settings/tree/master

Andere Tipps

Wenn es Daten gibt, und es ist in der Datenbank, ist es Teil des Modells.

Das ist nicht wirklich ein Problem RoR; es ist ein allgemeines OO Design-Problem.

Wenn es nach mir ginge, würde ich wahrscheinlich einen Weg finden, um die Daten als Modell zu konzipieren und dann mache es nur einen Singleton mit einer Factory-Methode und einem privaten Konstruktor.

Alternativ können Sie dies als eine Form der Protokollierung denken. In diesem Fall würden Sie nur ein Logger-Klasse haben (auch ein Singleton), die direkt auf die Datenbank liest / schreibt und wird am Anfang und am Ende jeder Anfrage aufgerufen.

In Rails, wenn Daten in der Datenbank ist es in einem Modell. In diesem Fall kann das Modell als „Configuration“ werden, aber es ist nach wie vor auf eine Activerecord-Klasse abgebildet in Ihrem Rails-System.

Wenn diese Daten wirklich statisch ist, können Sie die Datenbank überhaupt nicht brauchen. Sie könnten eine Variable in der Anwendungssteuerung verwenden (als Beispiel):

class ApplicationController < ActionController::Base
  helper :all 
  @data = "YOUR DATA HERE"   
end

Es gibt eine Reihe von Ansätzen, die verwendet werden können, Daten in einer Rails-Anwendung Verwendung zu instanziiert.

Ich bin mir nicht sicher, ob ich verstehe, warum Sie sagen, es kann nicht ein Rails-Modell passen.

Wenn es nur eine komplexe Datenstruktur ist, nur ein paar Ruby-Code speichert in einem Textfeld in der Datenbank: -)

Wenn Sie zum Beispiel eine komplexe verschachtelte Hash haben Sie speichern möchten, weisen Sie den folgenden Code zu Ihrem ‚Daten‘ Textfeld:

ComplexThing.data = complex_hash.inspect

Wenn Sie wollen, dass es wieder lesen, einfach

complex_hash = eval ComplexThing.data

Lassen Sie mich zwei weitere Dinge hinweisen über diese Lösung:

  • Wenn Sie Ihre Datenstruktur nicht Standard Ruby-Klassen sind, inspiziert ein einfaches es nicht tun kann. Wenn Sie # sehen. überall, ist etwas nicht richtig serialisiert
  • Dies ist eine naive Implementierung. Sie möchten echte Rangier-Lösungen überprüfen, wenn Sie Unicode-Daten riskieren oder wenn Sie wirklich eine Menge von maßgeschneiderten Klassen speichern.
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top