Vorlage rendern und URL-String im Browser ändern?

8

Ich habe 2 Aktionen - Bearbeiten und Aktualisieren. Form in Edit übergibt die Werte an Aktualisierungsaktion. Wenn das Speichern eines Modells fehlschlägt, rendere ich das Edit-Teplate, wo der Benutzer sieht, dass Fehler und Felder mit dem gefüllt sind, was er zuvor ausgefüllt hat. Es gibt eine große aber für mich - in URL-Panel im Browser des Benutzers gibt es / Benutzer / Update, auch wenn (und weil) ich gerendert Vorlage bearbeiten. Kann ich das irgendwie ändern, indem ich einige Parameter an die Rendermethode in der Aktualisierungsaktion übergebe? Ich möchte nicht, dass der Benutzer sieht, dass neben der Bearbeitung eine (Aktualisierungs-) Aktion ausgeführt wird. Ist es möglich?

    
Kreeki 16.01.2011, 19:14
quelle

3 Antworten

1

Dafür gibt es zwei Möglichkeiten:

1) Leiten Sie von der Aktualisierungsaktion zurück zur Bearbeitungsaktion um, anstatt nur die Vorlage zu rendern und die Fehlermeldungen und Attribute zu übergeben, die Sie zum Füllen des bearbeiteten Objekts verwenden möchten. Dies führt dazu, dass die URL / user / edit lautet.

%Vor%

2) Senden Sie anstelle der Aktualisierungsaktion an die Bearbeitungsaktion, und entfernen Sie die Aktualisierungsaktion vollständig. Sie können request.post verwenden? Überprüfen Sie in Ihrer Bearbeitungsaktion, ob es sich bei der Anforderung um eine Anforderung zum Posten oder Abrufen handelt, und führen Sie dann die Aktualisierung und die Bearbeitung von Aktionen mit derselben Funktionsdefinition durch.

%Vor%

HINWEIS: Beachten Sie jedoch, dass Sie die POST-Aktion niemals wirklich vor dem Client verbergen können, da sie Ihren Quellcode immer sehen und die Aktion sehen können, zu der Sie in Ihrem Formular schreiben.

    
Pan Thomakos 16.01.2011, 23:11
quelle
6

Hier ist der dritte Weg:

In Ihren routes.rb

%Vor%

In Ihrer Ansicht (edit.html.erb zum Beispiel)

%Vor%

In Ihrem Controller (users_controller.rb zum Beispiel)

%Vor%     
CL Chang 25.10.2012 02:46
quelle
0

Eine etwas modernere Version basierend auf CL Changs Antwort

%Vor%

Dies generiert alle Standard-Restful-Routen außer der Standard-Update-Route. (Wenn Sie nicht alle Aktionen möchten, können Sie only: [<your routes not including :update>]

verwenden

Zusätzlich generiert es

%Vor%

Jetzt aktualisieren Sie einfach Ihr Formular, um den Pfad anzugeben

%Vor%

Anstatt also per Patch zu / update zu senden, geht es zu / jobs // edit via patch, und das bringt Ihre Update-Aktion

jetzt, wenn es einen Fehler gibt, können Sie bearbeiten, und alle Fehler werden sichtbar sein - aber der Benutzer wird nicht bemerken, dass die URL unterscheidet sich von der Edit (weil nur die Methode ist anders)

%Vor%     
Confused Vorlon 16.05.2017 19:49
quelle