Um doppelte Logik zu vermeiden, sollten die Aktionen zum Erstellen und Aktualisieren identisch sein?Speichern Sie einen einfachen Blog-Post, sollten Methoden erstellen und aktualisieren die gleichen?
Ein gutes Beispiel dafür?
Um doppelte Logik zu vermeiden, sollten die Aktionen zum Erstellen und Aktualisieren identisch sein?Speichern Sie einen einfachen Blog-Post, sollten Methoden erstellen und aktualisieren die gleichen?
Ein gutes Beispiel dafür?
Die create
Methode ist verantwortlich für die Erstellung dieser einfachen Blogpost, während die update
Methode für die Aktualisierung verantwortlich ist.
def create
@blog = Blog.new(params[:blog])
if @blog.save
flash[:notice] = "Saved!"
redirect_to @blog
end
end
def update
@blog = Blog.find(params[:id])
if @blog.update_attributes(params[:blog])
flash[:notice] = "Saved!"
redirect_to @blog
end
end
Nicht viel Sie aus, dass extrahieren könnten außer dem, was zu tun ist, wenn das Speichern erfolgreich/fehlschlägt.
Während create
und update
sind ähnlich, ich denke nicht, es lohnt sich, sie buchstäblich gleich zu machen. Normalerweise werden Sie verschiedene Flash-Nachrichten für jeden benötigen. Wenn eine Überprüfung fehlschlägt, ist es normalerweise am besten, create
Ihre Aktion new
zu rendern, während Sie bei einer fehlgeschlagenen update
eher die edit
Aktion rendern möchten. Diese kleinen Unterschiede reichen in der Regel aus, sodass separate und neue Methoden einfacher und besser lesbar sind.
Ich persönlich hätte eine else
Klausel für jede von create
und update
. Sie würden wie folgt aussehen:
#create
else
render :action => "new"
end
#update
else
render :action => "edit"
end
Der Benutzer immer noch den Fehler sehen und korrigieren, aber auf diese Weise braucht ich nicht create
und update
Ansichten überhaupt.
Wenn Sie save!
oder update_attributes!
verwenden würde jeder Validierungsfehler eine Ausnahme auslösen, die Sie irgendwo retten müssten. Wenn Sie es nicht retten, erhalten Ihre Benutzer jedes Mal eine 500-Fehlerseite, wenn ein Modell nicht validiert werden konnte. Deshalb ist es konventioneller, das nicht zu verwenden! save
und update_attributes
Methoden.
sollte ich aufrufen speichern oder speichern! – Blankman
auch, was passiert, wenn die Update-Methode fehlschlägt, sollte ich "neu" rendern? – Blankman
@Blankman: Verwenden Sie in der 'create' Methode' save'. Sowohl "save" als auch "update_attributes" in den beiden Aktionen geben false zurück, wenn die Operation fehlschlägt. Dadurch kann der Benutzer Fehler im Formular korrigieren, anstatt sie auf eine andere Aktion umzuleiten. Dies ist auch der Grund, warum es keinen "else" -Teil zur if-Anweisung gibt (und nicht sein sollte). – vonconrad