Comment déterminer la valeur d'une variable de contrôleur lors de l'exécution dans Ruby on Rails ?
-
09-06-2019 - |
Question
Quelle est la meilleure façon pour moi de déterminer la valeur d’une variable de contrôleur pendant l’exécution ?
Par exemple, existe-t-il un moyen d'insérer une rupture dans le code et de faire apparaître la valeur de la variable à l'écran (ou dans le journal) ?
La solution
Oui.Le moyen le plus simple consiste à augmenter la valeur sous forme de chaîne.Ainsi: raise @foo.to_s
Ou bien, vous pouvez installer le débogueur (gem install ruby-debug
), puis démarrez le serveur de développement avec le --debugger
drapeau.Ensuite, dans votre code, appelez le debugger
instruction.
Dans l'invite du débogueur, vous disposez de nombreuses commandes, notamment p
pour imprimer la valeur d'une variable.
Mise à jour: voici un peu plus sur Ruby-debug.
Autres conseils
Si vous disposez d'une variable d'instance de contrôleur nommée @foo
, alors dans votre contrôleur, vous pouvez simplement faire quelque chose comme :
logger.debug "@foo is: #{@foo}"
De plus, vous pouvez afficher la valeur dans votre modèle de vue en utilisant :
<%= debug @foo %>
Je préfère utiliser la méthode inspect comme ceci :
raise @foo.inspect
Il contient plus d'informations que to_s, comme les valeurs d'attribut.
Résumé de Jordi Bunster, John Topley et Jaryl :
JE.Voie rapide et sale :
raise @foo.inspect
dans votre contrôleur.Ou
<% raise @foo.inspect %>
à votre avis.
II.Connexion appropriée pour vous development.log
:
logger.debug "@foo == #{@foo.inspect}"
III. Débogage complet:
Installez le débogueur (gem install ruby-debug
), puis démarrez le serveur de développement avec le --debugger
drapeau.Ensuite, dans votre code, appelez le debugger
instruction.
Dans l'invite du débogueur, vous disposez de nombreuses commandes, notamment p
pour imprimer la valeur d'une variable.
Déclencher une exception est le moyen le plus rapide si vous avez juste besoin de regarder une valeur, mais cela vaut la peine d'apprendre à utiliser correctement le débogueur.Il est rare que vous ayez uniquement besoin de voir la valeur d'une variable, vous essayez probablement de trouver un bug dans votre code, et c'est à cela que sert un débogueur.
L'envoi des informations au journal de développement est plus lent que l'une ou l'autre des deux autres options proposées jusqu'à présent si vous apprenez à utiliser le débogueur (qui souhaite lire les fichiers journaux).Utilisez l'enregistreur pour la production, vous voudrez voir quelle était la valeur lorsque quelqu'un vous appellera et vous dira que tout est cassé.
Eh bien, je préfère généralement la sortie d'erreur standard
$stderr.print("peu importe")
C'est simple et fait le travail.
- Ajouter mouvements de levier vers Gemfile :
gem 'pry-moves'
- Insérer
binding.pry
où tu veux t'arrêter - Tapez le nom de la variable pour voir sa valeur
Continuez ensuite en tapant c
, passez à la ligne suivante avec n
ou effectuez d'autres actions de débogage jusqu'à ce que vous résolviez le problème.