webentwicklung-frage-antwort-db.com.de

was ist der Unterschied zwischen link_to, redirect_to und rendern?

Ich bin verwirrt über die Hauptunterschiede zwischen link_to, redirect_to und render in Rails. Jeder kann das bitte erklären.

28
Sami

link_to wird in Ihrer Ansicht verwendet und generiert HTML-Code für einen Link

<%= link_to "Google", "http://google.com" %>

Dadurch wird in Ihrer Ansicht das folgende HTML erzeugt

<a href="http://google.com">Google</a>

redirect_to und render werden in Ihrem Controller verwendet, um auf eine Anfrage zu antworten. redirect_to leitet die Anfrage einfach auf eine neue URL um, wenn Sie in Ihrem Controller hinzufügen

redirect_to "http://google.com"

jeder, der auf Ihre Seite zugreift, wird effektiv an Google weitergeleitet

das Rendern kann auf viele Arten verwendet werden, wird jedoch hauptsächlich zum Rendern Ihrer HTML-Ansichten verwendet.

render "article/show"

Dadurch wird die Ansicht "app/views/article/show.html.erb" gerendert.

Der folgende Link erklärt ausführlich die Weiterleitung und die Render-Methoden http://guides.rubyonrails.org/layouts_and_rendering.html

31
RedXVII

Aus der Dokumentation :

In Bezug auf das Rendern einer Ansicht im Vergleich zur Umleitung einer Anforderung

... render teilt Rails mit, welche Ansicht (oder ein anderes Asset) zur Erstellung einer Antwort verwendet werden soll. Die Methode redirect_to führt etwas anderes aus: sie weist den Browser an, eine neue Anfrage für eine andere URL zu senden.

In Bezug auf das Rendern einer Ansicht

... render: action führt in der Zielaktion keinen Code aus...}

Umleitung einer Anfrage

... Ihr Code wird nicht mehr ausgeführt und wartet auf eine neue Anfrage für den Browser. Es ist nur so, dass Sie dem Browser mitgeteilt haben, welche Anfrage er als nächstes senden soll, indem Sie einen HTTP 302-Statuscode zurücksenden.


Grundsätzlich gilt:

link_to ist eine Hilfsmethode zum Generieren von URLs, die normalerweise in Ihren Ansichten verwendet werden (.html.erb -Dateien.

render weist Ihren Controller an, eine Ansicht zu rendern, ohne Daten (z. B. aus einem Formular) an die nächste Controller-Aktion zu übergeben.

redirect_to führt eine 302-Seiten-Weiterleitung durch, wobei Daten (z. B. aus einem Formular) an eine Controller-Aktion in Ihrer Web-App oder eine externe App (z. B. google, facebook, einen von Ihnen bevorzugten Web-Artikel usw.) weitergegeben werden.

9
sargas

link_to wird in ERB-Vorlagen verwendet. Es gibt einen Link zu einem bestimmten Pfad oder einer bestimmten URL.

redirect_to ist für Controller vorgesehen. Der Client fordert den angegebenen Pfad oder die angegebene URL an, sobald die Controller-Methode beendet ist.

render ist auch für Controller geeignet. Dadurch wird die angegebene Vorlage von Rails gerendert.

redirect_to und render dürfen in einer gegebenen Controller-Methode nur einmal aufgerufen werden.

3
Mike Yockey

Ich habe tatsächlich habe gerade einen Blog-Beitrag darüber geschrieben . Die wichtigsten Bits werden nachfolgend (mit Änderungen) kopiert.

Controller-Methoden: render vs. redirect_to

render und redirect_to Sind die beiden Möglichkeiten, wie Controller-Aktionen enden (im Allgemeinen). Um zu verstehen, wie sie funktionieren, sehen wir uns an, was Controller in einer Rails App tun:

  • Ein Benutzer versucht, auf eine Seite zuzugreifen.
    ( http: // localhost: 3000/books/index.html )
  • Unter der Haube sendet der Browser eine HTTP-Anforderung für den angegebenen Pfad auf dem Server.
    (GET /books/index.html)
  • Das Rails Routing-System sucht dann, welcher Controller dem angegebenen Anforderungspfad entspricht.
    (books GET /books/index(.:format) books#index)
  • Der Controller bereitet einige Daten vor und teilt dem Server dann mit, welche Antwort ( d. H. welcher HTTP-Header/Body-Inhalt) an den Client zurückgesendet werden soll .

Dieser letzte Schritt wird explizit ausgeführt, wenn Sie render oder redirect_to Aufrufen oder implizit, wenn Sie ihn weglassen .

Das ist,

def index
  @books = Book.all
end

ist das gleiche wie

def index
  @books = Book.all
  render :index
end

render :index sagt: 'Kombiniere die von mir aufbereiteten Daten (@books = Book.all) Mit der Ansichtsvorlage books/index.html.erb, Um eine vollständige Ansicht zu erstellen Senden Sie das HTML-Dokument an den Client zurück. '

redirect_to @book sagt: 'Fordern Sie den Client auf, den gesamten Prozess erneut zu starten und eine neue GET -Anforderung an url_for(@book) zu senden. .

Wenn Sie beide weglassen, wird durch die Aktion eine Vorlage mit demselben Namen wie die Aktion selbst gerendert. Mit anderen Worten, Sie müssen render nur dann explizit aufrufen, wenn die gewünschte Ansichtsvorlage nicht mit der Aktion übereinstimmt, aus der Sie sie rendern.

Beachten Sie, dass nicht jede Controller-Aktion über eine entsprechende Ansichtsvorlage verfügt. Im Allgemeinen versuchen #create, #update Und #destroy (Die alle an HTTP-Anforderungen ohne GET weitergeleitet werden), Änderungen an der Datenbank vorzunehmen Entweder redirect_to eine Ressource (falls erfolgreich) oder render das vorangegangene Formular sowie alle Fehler (falls fehlgeschlagen).

Wie die offiziellen Führer erklären (Betonung meiner),

Diese beiden Methoden [render und redirect_to] Stellen die beiden in Action Controllers verwendeten grundlegenden Aktionsarchetypen dar: Get-and-show und do-and-redirect . Die meisten Aktionen sind Variationen dieser Themen.


Ansichtsmethoden: render vs. link_to

render wird auch in Ansichtsvorlagen selbst verwendet. Anstatt ein komplettes HTML-Dokument zu generieren, wird eine Teilansichtsvorlage in eine größere Vorlage eingefügt. Hier ist das Fazit:

  • Sie können Teilansichts-Vorlagendateien erstellen, die in Ihre Standardvorlagen eingefügt werden (stellen Sie sich diese als modulare Seitenkomponenten vor).
  • Dateinamen von Partials müssen mit einem Unterstrich beginnen ( z. B._nav.html.erb).
  • Verwenden Sie render 'nav', Wenn Sie den _nav.html.erb - Teil aus einer Ansicht im selben Ordner einfügen möchten.
  • Verwenden Sie render 'shared/nav', Wenn Sie den Partial at app/views/shared/_nav.html.erb aus einer beliebigen Sicht in Ihr Projekt aufnehmen möchten .
  • Es gibt verschiedene Optionen und Kurzsyntaxen zum Übergeben von Daten in einen Teil, zum Rendern mehrerer Teilobjekte aus einem Auflistungsobjekt und vieles mehr. Siehe die Anleitungen für Details.

link_to Ist nur eine bequeme Methode zum Einfügen von Ankertags (a href - Tags) in Ihre Ansichtsvorlagen. Dies ist hilfreich, da viele der URLs, zu denen Sie einen Link erstellen möchten, andere Seiten in Ihrer Anwendung sind und auf diese URLs mithilfe von Objekten oder "Hilfsmethoden" verwiesen werden kann.

= link_to 'Back', books_path   # renders as <a href="/books">Back</a>
= link_to 'View', @book        # renders as <a href="/book/1">View</a> or similar
2
Ryan Lue

Ein link_to wird in einem Formular in Rails verwendet und ist ein Helfer, um ein Link-Element in HTML zu erstellen. Die anderen beiden werden nicht in Formularen verwendet, sondern in Controllern.

Sie render eine Seite, wenn Ihre Controller-Methode mit dieser Seite verknüpft ist. Z.B. Beim Aufruf von "new" sollte die Seite "new item" gerendert werden. Sie erfüllen die gerade gestellte Anfrage.

redirect wird genau dafür verwendet - Umleitung. Wenn Sie beispielsweise versuchen, auf eine Seite zuzugreifen, auf der Sie angemeldet sein müssen, leiten Sie den Benutzer auf die Anmeldeseite um. Umleitungen erzeugen also im Grunde eine neue Anfrage.

1
Kyri Elia

link_to gibt einen Standard-HTML-Anker aus = einen Link (Link_to-Dokumentation)

redirect_to wird im Allgemeinen für Antworten auf Seiten verwendet, z. B. zum Aktualisieren und Löschen. Es nimmt die von Ihnen angegebenen Parameter und leitet Ihre Seite entsprechend. (Weiterleitung zur Dokumentation)

render wird zum Laden von Partials oder zum Laden bestimmter .erb-Dateien in andere Dateien verwendet. (Renderdokumentation)

Es gibt eine Reihe von Beispielen im this Rails-Handbuch, in dem render und redirect_to erklärt werden sollten. link_to unterscheidet sich stark von Rendering und redirect_to

1

Ein link_to erstellt einen Hyperlink zu einer bestimmten URL, die im HTML-Code angezeigt wird. 

Abhängig von bestimmten Optionen entscheidet ein redirect_to, wohin Sie verlinken sollen. Wenn zum Beispiel jemand als Benutzer angemeldet ist, möchten Sie ihm vielleicht seine Einstellungsseite zeigen, andernfalls _ auf die Startseite umleiten.

Ein Renderer öffnet die gerenderte Datei, nimmt deren Inhalt und fügt sie in die vorhandene Datei ein, bevor der gesamte Block an den Empfänger gesendet wird. 

Ich hoffe ich habe recht.

1
stonefruit

Von den offiziellen Rails Guides :

Wie Sie gesehen haben, teilt Render Rails mit, welche Ansicht (oder ein anderes Asset) beim Erstellen einer Antwort verwendet werden soll. Die Methode redirect_to macht etwas anderes: Sie fordert den Browser auf, eine neue Anfrage für eine andere URL zu senden.
1
Agis