Je cherche un moyen de vider la structure d'un objet, similaire aux fonctions PHP print_r
et var_dump
pour des raisons de débogage.
Je cherche un moyen de vider la structure d'un objet, similaire aux fonctions PHP print_r
et var_dump
pour des raisons de débogage.
Réponses:
En vues:
include DebugHelper
...your code...
debug(object)
Dans les contrôleurs, modèles et autre code:
puts YAML::dump(object)
Vous pouvez également utiliser le raccourci YAML :: dump ( y ) sous la console Rails:
>> y User.first
--- !ruby/object:User
attributes:
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
attributes_cache: {}
=> nil
>>
Si vous souhaitez simplement prévisualiser le contenu d'une chaîne, essayez d'utiliser rise (par exemple dans les modèles, les contrôleurs ou tout autre endroit inaccessible). Vous obtenez le backtrace gratuitement :)
>> raise Rails.root
RuntimeError: /home/marcin/work/github/project1
from (irb):17
>>
Je vous encourage également 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 la gemme awesome_print .
Si vous voulez simplement que les données pertinentes soient affichées sur stdout (la sortie du terminal si vous exécutez à partir de la ligne de commande), vous pouvez utiliser p some_object
.
Les réponses précédentes sont excellentes mais si vous ne voulez pas utiliser la console (terminal), dans Rails, vous pouvez imprimer le résultat dans la vue en utilisant Helper ActionView :: Helpers :: DebugHelper du débogage
#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_attributes:
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'
attributes: !ruby/object:ActiveRecord::AttributeSet
attributes: !ruby/object:ActiveRecord::LazyAttributeHash
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::String
precision:
scale:
limit:
body: &4 !ruby/object:ActiveRecord::Type::Text
precision:
scale:
limit:
published_at: !ruby/object:ActiveRecord::AttributeMethods::TimeZoneConversion::TimeZoneConverter
subtype: &1 !ruby/object:ActiveRecord::Type::DateTime
precision:
scale:
limit:
created_at: !ruby/object:ActiveRecord::AttributeMethods::TimeZoneConversion::TimeZoneConverter
subtype: *1
updated_at: !ruby/object:ActiveRecord::AttributeMethods::TimeZoneConversion::TimeZoneConverter
subtype: *1
J'utilise ça :)
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 , je suis en utilisant awesome_print de ap
méthode qui fonctionne sur la console ainsi que dans les vues.
La sortie colorée spécifique au type fait vraiment une différence si vous avez besoin de rechercher visuellement des objets String
ou Numeric
(même si j'ai dû modifier un peu ma feuille de style pour obtenir un aspect soigné)
Récemment, je suis devenu un fan de PRY , je l'ai trouvé incroyablement pour faire des choses comme l'inspection des variables, le débogage du code en cours d'exécution et l'inspection du code externe. Cela pourrait être un peu exagéré en tant que réponse à cette question spécifique.
puts theobject.inspect.gsub(",", "\n")