Ruby on Rails de la semaine 3

Bienvenue dans Ruby on Rails à partir de la troisième semaine! Cette semaine, nous allons nous concentrer sur des choses spécifiques que vous devez savoir sur le cadre. Par exemple, nous allons parler de la manipulation de la structure du projet de deux manières (rendu et redirection). Nous verrons également comment vous ajoutez des liens dans des rails et comment commenter du code.. Commençons déjà!

Rattraper

Si vous n'avez pas lu les parties 1 et 2, il est vivement conseillé de les consulter avant de poursuivre ce didacticiel..

  • Semaine un
  • Deuxième semaine

Ajout d'interactions parmi les actions

Maintenant que nous avons appris à configurer les variables d'instance pour transférer des informations de l'automate à la vue, il est temps d'apprendre à transmettre des données entre différentes actions d'un automate. Pour ce tutoriel, nous allons continuer à utiliser le contrôleur learn. Nous n'avons pas vraiment besoin de garder ce que nous avons fait la semaine dernière, mais vous pouvez le faire si vous sentez que c'est une bonne ressource. Nous allons commencer simplement:

Effectuer une autre action dans une action différente

Pour cet exemple, le titre est plus complexe que la leçon réelle. Nous allons simplement utiliser ce qui est dans une action et faire la même chose dans une autre. Utilisons les connaissances acquises la semaine dernière sur les variables d’instance et appliquons-les maintenant. Premièrement, créons une nouvelle action appelée "another_action"; puis une autre action appelée "texte". Nous allons ensuite extraire l'action de text et la placer dans "another_action". Nous allons le prouver en référençant une variable d'instance dans la vue de "another_action" affectée dans le contrôleur "text". Désolé, si cela n'avait aucun sens. Si vous n'obtenez pas ce que je viens de dire, regardez le code suivant, qui, espérons-le, vous aidera:

 classe LearnController < ApplicationController def another_action text end def text @text = 'This text came from another action' end end

Nous allons ensuite créer une vue appelée "another_action.html.erb", où nous référons la variable text.

  Action Démo   <%= @text %>  

Explication

Comme vous pouvez le constater, nous avons référencé l'action "text" en la plaçant simplement dans "another_action". En faisant cela, nous avons également passé la définition de "text", qui était la variable d'instance. Pour démontrer davantage ce principe, plaçons-le dans plusieurs situations différentes, qui fonctionnent toutes.

Situation 1- Définition d'une variable d'instance égale à une action

 classe LearnController < ApplicationController def another_action @text = text end def text misc_text = 'This text really traveled!' end end

Situation 1 Résultat

Situation 2 - Remplacer la variable

Maintenant, nous allons devenir encore plus complexes:

 classe LearnController < ApplicationController def another_action @text = "text you'll never see" @text = text end def text wanted_text = overwrite_view end def overwrite_view overwrite_text = 'This text overwrote the original text' end end

Situation 2 Résultat

Ceci est l'ordre des événements que le code suivant a fait:

  • Donne à la variable d'occurrence "text" une valeur de "text que vous ne verrez jamais"
  • Ensuite, il l'a réaffecté à l'action "texte"
  • La variable "text" a maintenant la valeur de la variable locale voulue text.
  • La variable wanted_text a la valeur de l'action "overwrite_view"
  • Overwrite_view a une variable locale avec la valeur "Ce texte a remplacé le texte d'origine"
  • Ceci renvoie à la variable d'instance de @text.

Situation 3 Porter une variable

Nous allons garder celui-ci plus simple:

classe LearnController < ApplicationController def another_action @text = "text you'll never see" text end def text @text = 'This text overwrote the original text' end end


Situation 3 Résultat

Situation 4 Rendre quelque chose de spécifique

classe LearnController < ApplicationController def another_action @text = text end def text first = 'This text should not be passed to @text' second = 'This text would be put into the variable on default' return first end end

Cet exemple est particulièrement important, car vous apprenez maintenant un peu plus de syntaxe; la revenir commander. Cela dira à l'action quoi retourner à la fin.

Situation 4 Résultat

Liens Rails

Tout le monde devrait déjà savoir comment créer un lien HTML normal. (En utilisant Texte) Mais il existe aussi un moyen de le faire avec Rails. Cette méthode n'est pas Ruby, mais plutôt une partie du framework. Cela dit, vous ne pouvez l’utiliser que dans des fichiers HTML ruby ​​incorporés, pas dans des fichiers rb purs. Alors comment le fait-on? Voici le code:

  Démo Rails Link   <%= link_to('Another Action Link', :controller => 'learn',: action => 'another_action')%>  

À première vue, vous pourriez vous demander pourquoi vous voudriez changer la façon dont vous écrivez les liens, surtout si le remplacement est plus long! Une des raisons principales est la lisibilité. Vous pouvez facilement lire ceci et savoir exactement à quoi cela va se rapporter. En ce qui concerne la longueur, la commande: controller => n’est pas nécessaire si vous créez un lien vers une action du même contrôleur..

Avec ce code de rails, nous voyons aussi des symboles. Le ": contrôleur =>" est un symbole. Nous parlerons davantage de ce qu’ils feront plus tard, mais pour l’instant, il suffit de reconnaître le colon..

Rendu dans les rails

Un peu plus tôt dans cette série, nous avons parlé un peu des valeurs sensibles par défaut des rails. L’une des valeurs par défaut consiste à générer une vue qui porte le même nom que l’action de la vue correspondante. Mais que faire si nous voulions écraser ce que font automatiquement les rails? C'est en fait assez facile et une technique très utile. Lorsque vous travaillez sur un projet du monde réel, vous pouvez imaginer à quel point votre contrôleur pourrait devenir «maladroit» si vous deviez créer une vue et une action distinctes dans le contrôleur pour chaque page. Rails a une solution qui s'appelle le rendu. Le rendu vous permet de spécifier quelle vue utiliser pour chaque action. Gardez toutefois à l'esprit que, comme pour les liens de rails, il s'agit également d'un code exclusif aux rails et non de ruby, et destiné uniquement au contrôleur..

Si ce qui précède vous laisse un peu confus, laissez-moi vous montrer comment le faire. J'espère que cela clarifiera un peu. Pour ce premier exemple, nous allons rendre l'action à la vue qu'elle restituerait normalement de toute façon. En d'autres termes, ce code de rendu ne fait rien qui ne pourrait arriver sans lui. Tout ce qu'il fait est de montrer du code qui est habituellement simplement "supposé".

 def index render: action => 'index' end

Rendre une action dans une autre vue

Le dernier exemple n'est pas vraiment utile car le résultat est obtenu automatiquement quand même. Mais que se passe-t-il si vous avez une vue vraiment avancée pour une autre action et que vous voulez la même vue pour une action différente? Il serait non seulement fastidieux de créer une autre vue identique pour chaque action que vous créez, mais il serait également presque impossible de mettre à jour! Tout cela peut être corrigé en rendant chaque action similaire en action spécifique. Examinez le code suivant que je vous expliquerai plus tard et notez les différentes parties.

text_controller.rb:

 classe LearnController < ApplicationController def index render :action => 'text' fin def text @text = 'Texte'end def other @text ='Autre'render: action =>' text 'end end

text.html.erb:

   Démo de rendu de rails 

Bienvenue à la <%= @text %> Page

Explication du code:

Action indexée

Vous avez peut-être remarqué que j'ai inclus une action appelée "index". Cette action sera visualisée si vous montez un répertoire pour "apprendre". Cela fonctionne comme un fichier d'index ordinaire. Vous n'avez cependant pas à créer d'action spécifique pour l'index. Vous pouvez également utiliser le sujet précédemment traité sur l'héritage d'une autre action..

Rendre à la même vue

Pour cet exemple, nous n’avions besoin que d’une seule vue pour toutes les actions; et ils ont tous produit des pages différentes. Pour moi, c'est assez incroyable pour la quantité de travail que nous avons mis en.

Remarque: Cela peut sembler évident à certains, mais méfiez-vous du double rendu. Le double rendu provoquera une erreur car vous essayez de rendre une action à deux endroits différents. Pouvez-vous être à deux endroits à la fois? Non, et aucune action ne peut non plus. Si vous voulez voir à quoi ça ressemble, il suffit de rendre une action en deux vues différentes. Cela se produit lorsque vous effectuez des projets plus complexes, car la traînée d'actions peut devenir assez complexe et vous pouvez créer accidentellement cette erreur..

Assurez-vous de bien comprendre le concept de base du rendu, car ce sera une technique très vitale que vous utiliserez souvent en tant que développeur de rails..

Redirection d'une action

La redirection d'une action est similaire au rendu d'une action car il s'agit également d'un code de rails, utilisé uniquement dans le contrôleur. En outre, cela affecte le flux de l'application. Comme vous pouvez le deviner à partir du nom, la redirection vous permet de… bien rediriger.

Vous pourriez être surpris par le nombre de fois que vous utilisez la commande de redirection. Voici quelques utilisations courantes:

  • Création de pages d'alias
  • Effectuer une action dans le contrôleur puis rediriger vers une page secondaire
  • S'il y a une erreur, redirige vers une page d'erreur
  • Si l'utilisateur n'est pas connecté, envoyez-le à une page de connexion.

Assez bavardé, passons au code! Pour cet exemple de code, nous allons simplement modifier le contrôleur du dernier exemple et laisser la même vue. Comme vous le verrez, la redirection est très similaire en format au rendu:

 classe LearnController < ApplicationController def index redirect_to :action => 'text' fin def text @text = 'Texte'redirect_to: action =>' autre 'fin définit autre render: action =>' texte 'fin fin

Maintenant, allez à l'action d'index dans votre navigateur. Vous remarquerez que vous vous retrouvez à l'autre action dans votre barre d'adresse. Passons en revue ce code:

  • Tout d'abord, nous redirigeons vers le texte de l'action. Comme pour la liaison dans des rails, vous pouvez également spécifier un contrôleur si vous le redirigez vers un autre contrôleur. Vous voudriez simplement mettre: contrôleur => 'apprendre', avant l'action.
  • Le navigateur passe maintenant à l'action de texte. Ici, il définit une valeur pour @text. Mais le navigateur n'a pas de valeur pour @text. En effet, la redirection oublie essentiellement tout ce que vous dites dans cette action..
  • Nous sommes maintenant redirigés vers d'autres. Ici nous rendons à la vue de texte.

Rendre ou rediriger?

Bien qu'il existe des scénarios évidents dans lesquels vous choisiriez soit de rendre, soit de rediriger; il peut y avoir des décisions plus difficiles. Une clé importante cependant est que si vous soumettez des données dans une base de données ou quoi que ce soit qui modifie l'application, utilisez une redirection. Sinon, une actualisation pourrait resoumettre les données.

Dernières pensées

J'espère que vous avez beaucoup appris du tutoriel de cette semaine! Nous avons abordé un grand nombre de concepts importants, donc si vous êtes encore dérouté par quelque chose, relisez-le. La semaine prochaine, nous entrerons probablement dans la syntaxe ruby!

Comme toujours, n'hésitez pas à laisser des questions dans les commentaires. Aussi, s'il vous plaît digg cet article si cela vous a aidé!