Der Rails-Controller erstellt eine Aktionsdifferenz zwischen Model.new und Model.create

8

Ich gehe ein paar Tutorials für Rails 3 und 4 durch und stoße auf etwas, über das ich ein paar Einblicke hätte:

Was ist der Unterschied zwischen Model.new und Model.create in Bezug auf die Create-Aktion? Ich dachte, du verwendest die create -Methode im Controller, um zB zu speichern. @post = Post.create(params[:post]) , aber es sieht so aus, als würde ich mich irren. Jede Einsicht wird sehr geschätzt.

Erstellen Sie eine Aktion mit Post.new

%Vor%

Erstellen Sie eine Aktion mit Post.create

%Vor%

Ich habe zwei Fragen

  • Hat das mit einer Rails 4-Änderung zu tun?
  • Ist es eine schlechte Übung, @post = Post.create(post_params) ?
  • zu verwenden?
Wasabi Developer 31.07.2013, 07:02
quelle

2 Antworten

22

Modell.neu

Im Folgenden wird ein Post-Modell anhand der Parameter instanziiert und initialisiert:

%Vor%

Sie müssen save ausführen, um Ihre Instanz in der Datenbank zu erhalten:

%Vor%

Model.create

Das folgende instanziieren, initialisieren und speichern in der Datenbank ein Post-Modell mit den Parametern:

%Vor%

Sie müssen den Befehl save nicht ausführen, er ist bereits integriert.

Weitere Informationen zu new hier

Weitere Informationen zu create hier

    
Pierre-Louis Gottfrois 31.07.2013 07:18
quelle
0

Die Methode Model.new erstellt eine Nullmodellinstanz und die Methode Model.create versucht zusätzlich, sie direkt in der Datenbank zu speichern.

Die Methode

Model.create erstellt ein Objekt (oder mehrere Objekte) und speichert es in der Datenbank, wenn die Validierungen bestanden werden. Das resultierende Objekt wird zurückgegeben, unabhängig davon, ob das Objekt erfolgreich in der Datenbank gespeichert wurde oder nicht.

object = Model.create benötigt keine Methode object.save , um die Werte in der Datenbank zu speichern.

In der Methode " Model.new " können neue Objekte als leer (kein Bauparameter übergeben)

instanziiert werden

In Model.new(params[:params]) wird mit Attributen vorbelegt, aber noch nicht im DB gespeichert (übergeben Sie einen Hash mit Schlüsselnamen, die den zugehörigen Tabellenspaltennamen entsprechen).

Nach object = Model.new müssen wir das Objekt um object.save

speichern     
Debadatt 31.07.2013 07:15
quelle