Plötzlich, als ich zum ersten Mal "redirect_to" und "render" sah, verstand ich den Unterschied zwischen ihnen nicht wirklich. Lass uns tief graben und gemeinsam lernen!
redirect_to: Sendet eine HTTP-Anforderung an den Server und der Benutzer sieht den von ihm zurückgegebenen HTML-Code. Rendern: Eine Methode, die die View-Datei angibt, die in der Aktion aufgerufen werden soll.
Ich denke, dass es einige Teile gibt, die mit nur Worten schwer zu verstehen sind, deshalb werde ich jeden ** Verarbeitungsablauf ** erklären.
redirect_Verarbeitungsablauf von bis
① Umleitung in der Controller-Verarbeitung_Rennen zu
②redirect_HTTP-Anforderung an die durch das Argument to angegebene URL(GET!!)Lauf
③ HTTP-Anfrage(GET!!)Führt den der URL entsprechenden Routing-Prozess aus
(4) Der Controller und die dem Routing-Prozess entsprechende Aktion werden aufgerufen und der Prozess ausgeführt.
⑤ Führen Sie das Rendern der Ansicht gemäß dem Prozess aus
① Controller (redirect_to) → ② HTTP-Anfrage (GET !!) → ③ Routing → ④ Controller → ⑤ Ansicht
Prozessablauf rendern
① Führen Sie das Rendern in der Controller-Verarbeitung aus
(2) Zeigen Sie die durch die Renderoption angegebene Ansichtsdatei an
①controller(render) → ②view
Hierbei ist zu beachten, dass das Ziel von redirect_to immer das Routing der ** GET-Methode ** ist.
Sie sehen es ab und zu. Ein Controller wie der folgende.
controllers/books.rb
class BooksController < ApplicationController
def index
end
end
Wenn in der Aktion nichts erwähnt wird, wird das Rendern automatisch ausgeführt! !! Mit anderen Worten, im obigen Fall scheint "render'index" weggelassen zu sein, und diese Aktion ruft "views / books / index.html.erb" auf.
Schauen wir uns nun einige häufig verwendete Beispiele für redirect_to an und rendern!
controllers/books.rb
class BooksController < ApplicationController
def create
@book = Book.new(book_params)
@book.user_id = current_user.id
if @book.save
redirect_to books_path, flash[:notice] = "Posting erfolgreich! !!"
else
flash.now[:alert] = "Buchungsfehler!!"
render 'new'
end
end
end
Wenn das Ergebnis der Speichermethode beim Posten wahr ist, wird es zur Seite mit der Beitragsliste umgeleitet. Wenn dies falsch ist, wird die Seite für neue Beiträge erneut angezeigt.
Haben Sie bemerkt, dass Sie beim Anzeigen der Ansichtsdatei mit Render keine Aktion aufgerufen haben?
↑ render'new'
zeigt nur books / new.html.erb
an, nicht über die neue Aktion.
In diesem Muster möchte ich eine neue Seite anzeigen, da das Posten fehlgeschlagen ist. Wenn ich jedoch redirect_to verwende, rufe ich eine neue Aktion auf und übergebe eine leere Methode an die so neue Instanzvariable Da sich die Aktion im Rücksetzzustand befindet, verschwinden die vom Benutzer eingegebenen Daten. Daher verschwinden auch die Informationen zum Ausgeben der Fehlermeldung, und der Benutzer kann nicht sehen, warum nicht gepostet werden konnte.
Es ist kompliziert, aber es bestimmt einen wichtigen Wendepunkt. Ich hoffe, Sie werden es angehen, bis Sie hungrig sind.
Ich werde nicht auf Details eingehen, da dies weit vom Hauptpunkt entfernt ist. Wenn Sie jedoch eine Nachricht in der angezeigten Ansicht senden möchten, schreiben Sie wie folgt.
redirect_Im Falle von bis
flash[:notice] = "Botschaft"
Oder
notice: "Botschaft"
Zum Rendern
flash.now[:alert] = "Botschaft" #jetzt ist es soweit! !! !! !!
Ich habe den Unterschied zwischen redirect_to und render erklärt, was für Anfänger leicht ist, Fehler zu machen! !! In der Erklärung lerne ich oft selbst und bin mir der Bedeutung der Ausgabe sehr bewusst.
Recommended Posts