quelle est la différence entre un lien de redirection, et le rendu?

je suis confus au sujet de la principale différence(s) entre link_to,redirect_to et render dans les Rails. n'importe qui peut expliquer.

27
demandé sur Arslan Ali 2013-06-21 17:11:48

8 réponses

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

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

cela générera dans votre vue le html suivant

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

redirect_to et render sont utilisés dans votre controller pour répondre à une requête. redirect_to redirigera simplement la requête vers une nouvelle URL, si dans votre controller vous ajoutez

redirect_to "http://google.com"

quiconque accède à votre page sera effectivement redirigé vers Google

rendu peut être utilisé de plusieurs façons, mais il est principalement utilisé pour rendre vos vues html.

render "article/show"

cela rendra la vue "app/views/article / show.HTML.erb

le lien suivant expliquera plus en détail la méthode redirect_to et les méthodes de rendu http://guides.rubyonrails.org/layouts_and_rendering.html

31
répondu RedXVII 2013-06-21 13:20:12

Documentation:

concernant le rendu d'une vue vs rediriger une requête

. . . indique aux Rails les vues (ou autres éléments 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.

concernant le rendu d'une vue

. . . render :l'action ne s'exécute pas n'importe quel code dans l'action cible . . .

concernant la redirection d'une requête

. . . Votre code s'arrête et attend une nouvelle demande pour le navigateur. Il se trouve que vous avez dit au navigateur quelle requête il devrait faire ensuite, en renvoyant un code de statut HTTP 302.


en gros:

link_to est une méthode d'aide pour générer des URLs habituellement utilisées dans votre vues (.HTML.erb fichiers)

rendu indique à votre controller de rendre une vue sans passer de données (par exemple, à partir d'un formulaire) à l'action suivante du controller.

redirect_to est-ce qu'une redirection de 302 pages, passant des données (par exemple, à partir d'un formulaire) à une action de controller sur votre application web, ou à une application externe (ex: google, facebook, un article web que vous avez aimé, etc)

9
répondu sargas 2014-05-21 20:14:19

link_to doit être utilisé dans les modèles ERB. Elle génère un lien vers un chemin ou l'url.

redirect_to est destiné aux contrôleurs. Il fait en sorte que le client demande le chemin ou l'url spécifié une fois que la méthode controller est terminée.

render est également utilisé dans les controllers. Il provoque le rendu des Rails par le template spécifié.

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

3
répondu Mike Yockey 2013-06-21 13:18:11

j'ai fait viens d'écrire un billet de blog sur ce. Les bits les plus importants sont copiés ci-dessous (avec des modifications).

Méthodes De Contrôleur: render vs. redirect_to

render et redirect_to sont les deux façons dont les actions du contrôleur se terminent (en général). Pour comprendre comment ils fonctionnent, nous allons examiner ce que les contrôleurs font dans une application Rails:

  • Un utilisateur tente d'accéder à un page.

    (http://localhost:3000/books/index.html)
  • sous le capot, le navigateur envoie une requête HTTP pour le chemin spécifié sur le serveur.

    (GET /books/index.html)
  • le système de routage des Rails recherche ensuite quel contrôleur correspond au chemin de requête donné.

    (books GET /books/index(.:format) books#index)
  • le contrôleur prépare quelques données et puis indique au serveur qu'réponse ( i.e., quel HTTP en-tête/corps) à envoyer au client.

Cette dernière étape se produit explicitement lorsque vous appelez render ou redirect_to, ou implicitement si vous l'omettez.

Qui est

def index
  @books = Book.all
end

est le même que

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

render :index dit, " combinez les données que j'ai préparées (@books = Book.all) avec books/index.html.erb afficher le modèle pour générer un document HTML complet, puis le renvoyer à la client.’

redirect_to @book dit ‘ " Dites au client de recommencer tout le processus, en émettant un nouveau GET demande url_for(@book).

si vous omettez les deux, l'action produira un modèle avec le même nom que l'action elle-même. En d'autres termes, vous ne devez appeler render explicitement quand le template de vue que vous voulez ne correspond pas à l'action à partir de laquelle vous le rendez.

notez que toutes les actions des controllers n'ont pas une vue correspondante modèle. Généralement, #create,#update et #destroy (qui sont tous routés vers non -GET requêtes HTTP) essayer d'apporter quelques modifications à la base de données et ensuite redirect_to une ressource (si il a réussi) ou re-render la forme qui l'a précédé, avec toutes les erreurs (si elle a échoué).

comme l'expliquent les guides officiels (l'emphase est mienne),

Ces deux méthodes [render et redirect_to] représentent les deux archétypes d'action de base utilisés dans les Contrôleurs d'Action: Get-et-afficher et ne-et-redirect. La plupart des actions sont des variations sur ces thèmes.


Les Méthodes De Vue: render vs. link_to

render est également utilisé dans les modèles de vue eux-mêmes. Plutôt que de générer un document HTML complet, il est utilisé pour insérer un modèle de vue partielle en un plus grand. Voici le résultat:

  • Vous pouvez créer modèle de vue partielle fichiers à insérer dans vos gabarits standards (pensez-y comme des composants de page modulaires).
  • les noms de fichier des partiels doivent commencer par un underscore ( e.g.,_nav.html.erb).
  • Utiliser render 'nav' si vous voulez inclure le _nav.html.erb partielle à partir d'une vue située dans le même dossier.
  • Utiliser render 'shared/nav' si vous voulez inclure le partiel à app/views/shared/_nav.html.erb de n'importe quel point de vue dans votre le projet.
  • il existe plusieurs options et syntaxes en raccourci pour passer des données dans une partie, rendant plusieurs partiels à partir d'un objet de collection, et plus encore. Voir les guides pour plus de détails.

link_to est juste une méthode pratique pour insérer des étiquettes d'ancrage (a href tags) dans vos modèles de vue. Ceci est utile parce qu'une grande partie des URLs que vous voulez lier sont d'autres pages dans votre application, et ces URLs peuvent être référencés à l'aide d'objets ou "helper", comme ceci:

= 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
répondu Ryan Lue 2017-08-24 15:52:41

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

Vous render une page si votre méthode de controller est liée à cette page. E. g. l'appel de "nouveau" doit rendre le "nouvel élément". Ils répondent à la demande qui vient d'être faite.

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

1
répondu Kyri Elia 2013-06-21 13:18:32

link_to produira une ancre html standard=un lien (link_to documentation)



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



render est utilisé pour charger des partiels ou charger spécifique .cre des fichiers dans d'autres. (render la documentation)



Il y a un tas d'exemples sur le guide des rails qui devrait expliquer le rendu et la redirection de_to. link_to est assez différent du rendu et redirect_to

1
répondu Nathaniel Johnson 2013-06-21 13:20:51

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

une 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 paramètres, d'autre 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 la totalité au destinataire.

j'Espère que je suis droit.

1
répondu stonefruit 2013-06-21 13:24:54

officiel Rails guides:

comme vous l'avez vu, render indique aux Rails quelle vue (ou autre élément d'actif) utiliser pour construire 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
répondu Agis 2013-08-06 10:19:45