2010-12-17 2 views

Antwort

1

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.

+0

sollte ich aufrufen speichern oder speichern! – Blankman

+0

auch, was passiert, wenn die Update-Methode fehlschlägt, sollte ich "neu" rendern? – Blankman

+0

@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

0

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.

Verwandte Themen