[RUBY] [Rails] Différence entre redirect_to et render [Débutant]

introduction

Du coup, quand j'ai vu pour la première fois redirect_to et `` render '', je n'ai pas vraiment compris la différence entre eux. Creusons profondément et apprenons ensemble!

Différence entre redirect_to et render

redirect_to: envoie une requête HTTP au serveur et l'utilisateur voit le HTML renvoyé par celui-ci. render: méthode qui spécifie le fichier View à appeler dans l'action.

Je pense qu'il y a certaines parties qui sont difficiles à comprendre avec juste des mots, donc je vais expliquer chaque ** flux de traitement **.

À propos du déroulement de chaque processus

redirect_flux de traitement de à


① redirection dans le traitement du contrôleur_Courir vers
②redirect_Requête HTTP à l'URL spécifiée par l'argument to(GET!!)Courir
③ Requête HTTP(GET!!)Exécute le processus de routage correspondant à l'URL
(4) Le contrôleur et l'action correspondant au processus de routage sont appelés et le processus est exécuté.
⑤ Exécuter le rendu de vue en fonction du processus

① contrôleur (redirect_to) → ② requête HTTP (GET !!) → ③ routage → ④ contrôleur → ⑤ vue

flux de processus de rendu


① Exécuter le rendu dans le processus de contrôleur
(2) Afficher le fichier de vue spécifié par l'option de rendu

①controller(render) → ②view

Il faut noter ici que la destination de redirect_to est toujours le routage de la ** méthode GET **.

Lorsque redirect_to et render ne sont pas spécifiés

Vous le voyez de temps en temps. Un contrôleur comme celui ci-dessous.

controllers/books.rb


class BooksController < ApplicationController
  def index
  end
end

Si rien n'est mentionné dans l'action, le rendu sera exécuté automatiquement! !! En d'autres termes, dans le cas ci-dessus, il semble que render'index '' 'soit omis, et cette action appelle views / books / index.html.erb' '.

Méthode de description fréquemment consultée

Jetons maintenant un œil à quelques exemples couramment utilisés de redirect_to et render!

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] = "Publication réussie! !!"
    else
      flash.now[:alert] = "Échec de la publication!!"
      render 'new'
    end
  end
end

Lors de la publication, si le résultat de la méthode de sauvegarde est vrai, il sera redirigé vers la page de la liste des articles, et s'il est faux, la page des nouveaux articles sera réaffiche.

Pourquoi utiliser le rendu si faux

Avez-vous remarqué que vous n'avez appelé aucune action lors de l'affichage du fichier de vue à l'aide du rendu? ↑ render'new '' n'affiche que books / new.html.erb '', pas via la nouvelle action.

Dans ce modèle, je veux afficher une nouvelle page car la publication a échoué, mais si j'utilise redirect_to, j'appelle une nouvelle action et passe une méthode vide à la variable d'instance, donc nouvelle L'action étant dans l'état de réinitialisation, les données saisies par l'utilisateur disparaissent. Par conséquent, les informations pour l'émission du message d'erreur disparaîtront également et l'utilisateur ne pourra pas voir "pourquoi n'a pas pu publier".

C'est compliqué, mais cela détermine un tournant important, alors j'espère que vous y ferez face jusqu'à ce que vous ayez faim.

(Supplément) À propos du message flash au moment du rendu

Je n'entrerai pas dans les détails car il est loin de la ligne principale, mais si vous souhaitez envoyer un message dans la vue affichée, écrivez comme suit.

redirect_Dans le cas de


flash[:notice] = "message"
Ou
notice: "message"

Pour le rendu


flash.now[:alert] = "message"  #c'est maintenant! !! !! !!

en conclusion

J'ai expliqué la différence entre redirect_to et render, ce qui est facile pour les débutants de faire des erreurs! !! Dans l'explication, j'apprends souvent par moi-même et je suis parfaitement conscient de l'importance de la production.

Recommended Posts

[Rails] Différence entre redirect_to et render [Débutant]
[rails] Différence entre redirect_to et render
Différence entre redirect_to et render
Différence entre redirect_to et render
Différence entre render et redirect_to
[Rails] Afficher le message d'erreur - Différence entre render et redirect_to, flash-
[Rails] Différence entre find et find_by
Les rails rendent redirect_to
[Rails] Différentes différences entre redirect_to et méthode de rendu et méthode de sortie de la méthode de rendu
Différence entre vh et%
Différence entre i ++ et ++ i
[Rails / Active Record] À propos de la différence entre créer et créer!
Différence entre le membre et la collection de rails routes.rb
[Rails] Différence entre la méthode de création et la méthode nouvelle + sauvegarde
[Rails] J'ai étudié la différence entre les ressources et les ressources
Différence entre produit et variante
[Java] Différence entre == et égal
Différence entre les variables et les variables d'instance
Différence entre mockito-core et mockito-all
Différence entre classe et instance
Différence entre l'installation de bundle et de bundle
Différence entre ArrayList et LinkedList
Différence entre .bashrc et .bash_profile
Différence entre StringBuilder et StringBuffer
[Java débutant] Différence entre la longueur et la longueur () ~ Je ne sais pas ~
[Rails] Quelle est la différence entre l'installation et la mise à jour du bundle?
Différence entre la méthode d'instance et la méthode de classe
Différence entre interface et classe abstraite
Différence entre l'opérateur == et la méthode égale
[Java] Différence entre Hashmap et HashTable
[Terminal] Différence entre irb et pry
[Ruby] Différence entre is_a? Et instance_of?
Différence entre l'opérateur == et la méthode eqals
Différence approximative entre RSpec et minitest
Utilisez redirect_to et effectuez un rendu correctement
Différence entre la variable d'instance et la variable de classe
[JAVA] Différence entre abstrait et interface
Différence entre Thymeleaf @RestController et @Controller
Différence entre Stream map et flatMap
[Java] Différence entre array et ArrayList
Différence entre le type primitif et le type de référence
Différence entre string.getByte () et Hex.decodeHex (string.toCharaArray ())
[Java] Différence entre fermable et fermable automatiquement
[Java] Différence entre StringBuffer et StringBuilder
[Android] Différence entre finish () et return;
[Rails] Pourquoi est-il rendu si la sauvegarde réussit et que redirect_to échoue?
Remarque: Différence entre Ruby "p" et "met"
Différence entre final et immuable en Java
[Remarque] Différence entre l'installation et la mise à jour du bundle
Différence entre la variable d'instance Ruby et la variable locale
Différence entre pop () et peek () dans la pile
[Pour les débutants] Différence entre Java et Kotlin
Différence entre isEmpty et isBlank de StringUtils
Différence entre getText () et getAttribute () de Selenium