2 Stimmen

Rails-Controller, wenn kein ActiveRecord-Modell?

Ich versuche, eine Rails-Webanwendung zu erstellen, die nicht ActiveRecord-Framework verwendet, da ich keine relationale Datenbank-Backend habe.

Bisher ist es mir gelungen, eine einfache Beispielanwendung zu erstellen, die perfekt zum Auflisten, Anzeigen und Bearbeiten meiner Datensätze funktioniert.

Allerdings habe ich einige Probleme bei der Erstellung von Datensätzen.

Das Problem ist, dass sich die Controller-Klasse nicht auf die gleiche Weise verhält, wenn die Modellklasse nicht von ActiveRecord::Base erbt.

Aus der Sicht des Controllers scheint die Erstellung eines Datensatzes in einem klassischen Active-Record-Modellschema, in dem das Modell von ActiveRecord::Base erbt, folgendermaßen abzulaufen:

  • controller.new : Erstellung eines nicht persistenten Datensatzes, Rendering des Eingabeformulars
  • controller.create : Einrichten des Datensatzes mit Benutzereingabe, persistente Speicherung, .

In dem Fall, dass das Modell kein ActiveRecord ist, ergibt sich jedoch die folgende Sequenz:

  • controller.neu
  • controller.update

Das ist natürlich ein wenig seltsam, weil wir die Erstellungsmethode überspringen, so dass es zu einem Null-Instanz-Fehler führen wird!

Ich bin ziemlich sicher, dass dieses Verhalten durch etwas, das in das Modell implementiert werden sollte diktiert wird, jedoch war ich nicht in der Lage zu finden, was (wahrscheinlich, weil ich ein absoluter Anfänger mit Schienen bin)

Also, wenn jemand hier hat einige Hinweise auf was ich sein sollte, suchen/implementieren, um diese Situation zu lösen und haben das gleiche Verhalten in beiden Fällen, ich wäre wirklich dankbar.

Gracias,

7voto

clyfe Punkte 23285

Lassen Sie Ihr benutzerdefiniertes Modell die MyModel#new_record? Methode (Instanzmethode) und Sie werden das gewünschte Verhalten haben. Wenn new_record? true zurückgibt, geht es zu create, und wenn es false zurückgibt, geht es zu update.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X