Estoy buscando una forma de volcar la estructura de un objeto, similar a las funciones de PHP print_ry var_dumppor motivos de depuración.
Estoy buscando una forma de volcar la estructura de un objeto, similar a las funciones de PHP print_ry var_dumppor motivos de depuración.
Respuestas:
En vistas:
include DebugHelper
...your code...
debug(object)
En controladores, modelos y otro código:
puts YAML::dump(object)
También puede usar YAML :: dump shorthand ( y ) en la consola de 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 solo desea obtener una vista previa del contenido de algunas cadenas, intente usar raise (por ejemplo, en modelos, controladores o algún otro lugar inaccesible). Obtienes el backtrace gratis :)
>> raise Rails.root
RuntimeError: /home/marcin/work/github/project1
from (irb):17
>>
También te animo a que pruebes ruby-debug :
¡Es increíblemente útil!
Puede utilizar puts some_variable.inspect. O la versión más corta: p some_variable. Y para una salida más bonita, puede usar la gema awesome_print .
Si solo desea que los datos relevantes se muestren en stdout (la salida del terminal si está ejecutando desde la línea de comando), puede usar p some_object.
Las respuestas anteriores son geniales, pero si no desea usar la consola (terminal), en Rails puede imprimir el resultado en la Vista utilizando el Asistente de depuración ActionView :: Helpers :: DebugHelper
#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
resultados (en el navegador)
- !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
Yo uso esto :)
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
Últimamente estoy usando el método de awesome_printap que funciona tanto en la consola como en las vistas.
La salida de color específica del tipo realmente marca la diferencia si necesita escanear visualmente Stringu Numericobjetos (aunque tuve que modificar un poco mi hoja de estilo para obtener un aspecto pulido)
Recientemente me he convertido en un fanático de PRY , lo he encontrado increíblemente para hacer cosas como inspeccionar variables, depurar código en ejecución e inspeccionar código externo. Podría ser un poco exagerado responder a esta pregunta específica.
puts theobject.inspect.gsub(",", "\n")