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à!
Si vous n'avez pas lu les parties 1 et 2, il est vivement conseillé de les consulter avant de poursuivre ce didacticiel..
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:
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.
classe LearnController < ApplicationController def another_action @text = text end def text misc_text = 'This text really traveled!' end end
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
Ceci est l'ordre des événements que le code suivant a fait:
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
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.
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..
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
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
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..
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:
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:
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.
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é!