Existe-t-il un équivalent à print_r ou var_dump dans Ruby / Ruby on Rails?

Je cherche un moyen de vider la structure d’un object, similaire aux fonctions print_r et var_dump de var_dump pour des raisons de débogage.

La méthode .inspect de tout object si le format est correctement affiché, faites-le ..

 < %= theobject.inspect %> 

La méthode .methods peut également être utile:

 < %= theobject.methods.inspect %> 

Il peut être utile de mettre cela dans


balises


, en fonction des données

Dans les vues:

 include DebugHelper ...your code... debug(object) 

Dans les contrôleurs, modèles et autres codes:

 puts YAML::dump(object) 

La source

Dans une vue, vous pouvez utiliser < %= debug(yourobject) %> qui générera une vue YAML de vos données. Si vous voulez quelque chose dans votre journal, vous devez utiliser logger.debug yourobject.inspect .

Vous pouvez également utiliser YAML :: dump sténographie ( y ) sous la console Rails:

 >> y User.first --- !ruby/object:User atsortingbutes: created_at: 2009-05-24 20:16:11.099441 updated_at: 2009-05-26 22:46:29.501245 current_login_ip: 127.0.0.1 id: "1" current_login_at: 2009-05-24 20:20:46.627254 login_count: "1" last_login_ip: last_login_at: login: admin atsortingbutes_cache: {} => nil >> 

Si vous souhaitez simplement prévisualiser le contenu d’une chaîne, essayez d’utiliser raise (par exemple, dans des modèles, des contrôleurs ou d’autres endroits inaccessibles). Vous obtenez le backtrace gratuitement 🙂

 >> raise Rails.root RuntimeError: /home/marcin/work/github/project1 from (irb):17 >> 

Je vous encourage aussi vraiment à essayer Ruby-Debug :

C’est incroyablement utile!

Vous pouvez utiliser puts some_variable.inspect . Ou la version plus courte: p some_variable . Et pour une sortie plus jolie, vous pouvez utiliser le joyau awesome_print .

Si vous voulez juste que les données pertinentes soient affichées dans stdout (la sortie du terminal si vous utilisez la ligne de commande), vous pouvez utiliser p some_object .

Les réponses précédentes sont excellentes, mais si vous ne souhaitez pas utiliser la console (terminal), vous pouvez imprimer le résultat dans View en utilisant le composant Helper ActionView :: Helpers :: DebugHelper de Debug.

 #app/view/controllers/post_controller.rb def index @posts = Post.all end #app/view/posts/index.html.erb < %= debug(@posts) %> #start your server rails -s 

résultats (dans le navigateur)

 - !ruby/object:Post raw_atsortingbutes: id: 2 title: My Second Post body: Welcome! This is another example post published_at: '2015-10-19 23:00:43.469520' created_at: '2015-10-20 00:00:43.470739' updated_at: '2015-10-20 00:00:43.470739' atsortingbutes: !ruby/object:ActiveRecord::AtsortingbuteSet atsortingbutes: !ruby/object:ActiveRecord::LazyAtsortingbuteHash types: &5 id: &2 !ruby/object:ActiveRecord::Type::Integer precision: scale: limit: range: !ruby/range begin: -2147483648 end: 2147483648 excl: true title: &3 !ruby/object:ActiveRecord::Type::Ssortingng precision: scale: limit: body: &4 !ruby/object:ActiveRecord::Type::Text precision: scale: limit: published_at: !ruby/object:ActiveRecord::AtsortingbuteMethods::TimeZoneConversion::TimeZoneConverter subtype: &1 !ruby/object:ActiveRecord::Type::DateTime precision: scale: limit: created_at: !ruby/object:ActiveRecord::AtsortingbuteMethods::TimeZoneConversion::TimeZoneConverter subtype: *1 updated_at: !ruby/object:ActiveRecord::AtsortingbuteMethods::TimeZoneConversion::TimeZoneConverter subtype: *1 

Je l’utilise 🙂

 require 'yaml' module AppHelpers module Debug module VarDump class < < self def dump(dump_object, file_path) File.open file_path, "a+" do |log_file| current_date = Time.new.to_s + "\n" + YAML::dump(dump_object) + "\n" log_file.puts current_date log_file.close end end end end end end 

Dernièrement, j’utilise la méthode ap awesome_print qui fonctionne aussi bien sur la console que dans les vues.

La sortie colorée spécifique au type fait vraiment une différence si vous devez rechercher visuellement des objects Ssortingng ou Numeric (bien que j’ai dû modifier un peu ma feuille de style pour avoir un aspect plus soigné)

Récemment, je suis devenu un fan de PRY , je l’ai trouvé incroyablement pour faire des choses comme inspecter des variables, déboguer du code en cours d’exécution et inspecter du code externe. Il pourrait être un peu exagéré comme une réponse à cette question spécifique.