web-dev-qa-db-fra.com

quelle est la différence entre link_to, redirect_to et render?

Les principales différences entre link_to, redirect_to et render dans Rails sont confuses. n'importe qui peut expliquer s'il vous plait.

28
Sami

link_to est utilisé dans votre vue et génère du code HTML pour un lien.

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

Cela va générer dans votre vue le code HTML suivant

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

redirect_to et render sont utilisés dans votre contrôleur pour répondre à une demande . redirect_to redirigera simplement la demande vers une nouvelle URL, si vous ajoutez dans votre contrôleur

redirect_to "http://google.com"

quiconque accédant à votre page sera effectivement redirigé vers Google

le rendu peut être utilisé de plusieurs façons, mais principalement pour le rendu de vos vues HTML.

render "article/show"

Cela rendra la vue "app/views/article/show.html.erb"

Le lien suivant expliquera les méthodes de redirection et de rendu plus en détail http://guides.rubyonrails.org/layouts_and_rendering.html

31
RedXVII

De la Documentation :

Concernant le rendu d'une vue ou la redirection d'une demande

... render indique à Rails quelle vue (ou quel élément d'actif) utiliser dans la construction d'une réponse. La méthode redirect_to fait quelque chose de complètement différent: elle indique au navigateur d'envoyer une nouvelle demande pour une URL différente.

En ce qui concerne le rendu d'une vue

... render: action n'exécute aucun code dans l'action cible...

Concernant la redirection d'une demande

... Votre code cesse de fonctionner et attend une nouvelle requête du navigateur. Il se trouve que vous ayez indiqué au navigateur la requête qu'il devrait ensuite effectuer en renvoyant un code d'état HTTP 302.


Fondamentalement:

link_to est une méthode d'assistance permettant de générer les URL habituellement utilisées dans vos vues (fichiers .html.erb).

render indique à votre contrôleur de rendre une vue sans transmettre de données (par exemple, d'un formulaire) à l'action suivante du contrôleur.

redirect_to effectue une redirection de page 302 en transmettant des données (d'un formulaire, par exemple) à une action du contrôleur de votre application Web ou à une application externe (ex: google, facebook, un article Web que vous avez aimé, etc.).

9
sargas

link_to est à utiliser dans les modèles ERB. Il génère un lien vers un chemin ou une URL spécifique.

redirect_to est destiné aux contrôleurs. Il oblige le client à demander le chemin ou l'URL spécifié une fois que la méthode du contrôleur a été fermée.

render est également à utiliser dans les contrôleurs. Cela oblige Rails à rendre le modèle spécifié.

redirect_to et render ne peuvent être appelés qu'une seule fois dans une méthode de contrôleur donnée.

3
Mike Yockey

Un link_to est utilisé sur un formulaire dans Rails et constitue une aide pour créer un élément de lien dans html. Les deux autres ne sont pas utilisés dans les formulaires, mais plutôt dans les contrôleurs.

Vous render une page si votre méthode de contrôleur est liée à cette page. Par exemple. l'appel de 'new' devrait afficher la page 'new item'. Ils répondent à la demande qui vient d'être faite.

redirect est utilisé exactement pour cela - la redirection. Par exemple, si vous essayez d'accéder à une page sur laquelle vous devez être connecté, vous redirigez l'utilisateur vers la page de connexion. Ainsi, les redirections génèrent essentiellement une nouvelle requête.

1
Kyri Elia

link_to affichera une ancre HTML standard = un lien (documentation de link_to)

redirect_to est couramment utilisé pour les réponses de page telles que update et delete. Il prendra les paramètres que vous lui donnez et dirigera votre page de manière appropriée. (redirect_to documentation)

le rendu est utilisé pour charger des partiels ou des fichiers .erb spécifiques. (restituer la documentation)

Il y a un tas d’exemples sur this Rails guide qui devrait expliquer render et redirect_to. link_to est assez différent du rendu et de redirect_to

1
Nathaniel Johnson

Un lien_to crée un lien hypertexte vers une URL spécifique, qui apparaît sur le code HTML. 

Un redirect_to décidera où vous lier, en fonction de certaines options. Par exemple, si quelqu'un est connecté en tant qu'utilisateur, vous pouvez lui montrer sa page de paramètres, sinon redirect_to à la page d'accueil.

Un rendu ouvrira le fichier rendu, prendra son contenu et le collera dans le fichier existant avant d’envoyer le bloc entier au destinataire. 

J'espère que j'ai raison.

1
stonefruit

Depuis les guides officiels Rails :

Comme vous l'avez vu, render indique à Rails la vue (ou autre élément d'actif) à utiliser pour créer une réponse. La méthode redirect_to fait quelque chose de complètement différent: elle indique au navigateur d'envoyer une nouvelle demande pour une URL différente.
1
Agis