[RUBY] [Rails] Unterschied zwischen redirect_to und render [Anfänger]

Einführung

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!

Unterschied zwischen redirect_to und render

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.

Über den Ablauf jedes Prozesses

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.

Wenn redirect_to und render nicht angegeben sind

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.

Häufig angesehene Beschreibungsmethode

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.

Warum Render verwenden, wenn false

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.

(Ergänzung) Informationen zur Flash-Nachricht zum Zeitpunkt des Renderns

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! !! !! !!

abschließend

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

[Rails] Unterschied zwischen redirect_to und render [Anfänger]
[Rails] Unterschied zwischen redirect_to und Rendern
Unterschied zwischen redirect_to und render
Unterschied zwischen redirect_to und render
Unterschied zwischen render und redirect_to
[Rails] Fehlermeldung anzeigen - Unterschied zwischen render und redirect_to, flash-
[Rails] Unterschied zwischen find und find_by
Schienen rendern redirect_to
[Rails] Verschiedene Unterschiede zwischen redirect_to und Render-Methode und Ausgabemethode der Render-Methode
Unterschied zwischen vh und%
Unterschied zwischen i ++ und ++ i
[Rails / Active Record] Über den Unterschied zwischen create und create!
Unterschied zwischen Mitglied und Sammlung von Schienen route.rb
[Schienen] Unterschied zwischen Erstellungsmethode und neuer + Speichermethode
[Rails] Ich habe den Unterschied zwischen Ressourcen und Ressourcen untersucht
Unterschied zwischen Produkt und Variante
[Java] Unterschied zwischen == und gleich
Unterschied zwischen Variablen und Instanzvariablen
Unterschied zwischen Mockito-Core und Mockito-All
Unterschied zwischen Klasse und Instanz
Unterschied zwischen Bundle und Bundle-Installation
Unterschied zwischen ArrayList und LinkedList
Unterschied zwischen .bashrc und .bash_profile
Unterschied zwischen StringBuilder und StringBuffer
[Java-Anfänger] Unterschied zwischen Länge und Länge () ~ Ich weiß nicht ~
[Rails] Was ist der Unterschied zwischen Bundle-Installation und Bundle-Update?
Unterschied zwischen Instanzmethode und Klassenmethode
Unterschied zwischen Schnittstelle und abstrakter Klasse
Unterschied zwischen == Operator und Methode gleich
[Java] Unterschied zwischen Hashmap und HashTable
[Terminal] Unterschied zwischen irb und pry
[Ruby] Unterschied zwischen is_a? Und instance_of?
Unterschied zwischen dem Operator == und der Methode eqals
Grober Unterschied zwischen RSpec und Minitest
Verwenden Sie redirect_to und rendern Sie richtig
Unterschied zwischen Instanzvariable und Klassenvariable
[JAVA] Unterschied zwischen Abstract und Interface
Unterschied zwischen Thymeleaf @RestController und @Controller
Unterschied zwischen Stream Map und FlatMap
[Java] Unterschied zwischen Array und ArrayList
Unterschied zwischen primitivem Typ und Referenztyp
Unterschied zwischen string.getByte () und Hex.decodeHex (string.toCharaArray ())
[Java] Unterschied zwischen Closeable und AutoCloseable
[Java] Unterschied zwischen StringBuffer und StringBuilder
[Android] Unterschied zwischen finish () und return;
[Rails] Warum wird gerendert, wenn das Speichern erfolgreich ist und redirect_to fehlschlägt?
Hinweis: Unterschied zwischen Ruby "p" und "Puts"
Unterschied zwischen final und Immutable in Java
[Hinweis] Unterschied zwischen Bundle-Installation und -Update
Unterschied zwischen Ruby-Instanzvariable und lokaler Variable
Unterschied zwischen pop () und peek () im Stapel
[Für Anfänger] Unterschied zwischen Java und Kotlin
Unterschied zwischen isEmpty und isBlank von StringUtils
Unterschied zwischen getText () und getAttribute () von Selen