En PHP que puede hacer:¿Existe un equivalente de print_r de PHP en Ruby/Rails?
print_r($var)
o vardump($var)
que imprime la información "humano-readible" acerca variable.
¿Hay funciones equivalentes/ayudantes para aquellos en Ruby/Rails?
En PHP que puede hacer:¿Existe un equivalente de print_r de PHP en Ruby/Rails?
print_r($var)
o vardump($var)
que imprime la información "humano-readible" acerca variable.
¿Hay funciones equivalentes/ayudantes para aquellos en Ruby/Rails?
En las plantillas Rieles usted puede hacer
<%= debug an_object %>
y hará una buena salida HTML PRE.
Trate de usar pp Tendrá que lo requieran en los scripts (o en el IRB si su .irbc no ya lo hacen):.
require 'pp'
A continuación, se puede 'PrettyPrint' un objeto así:
pp object
Existe el método inspect
que ayuda. A veces, llamar al método to_s
en un objeto ayudará (to_s devuelve una representación de cadena del objeto). También puede consultar methods
, local_variables
, class_variables
, instance_variables
, constants
y global_variables
.
p ['Hello',"G'day",'Bonjour','Hola'].inspect
# >> "[\"Hello\", \"G'day\", \"Bonjour\", \"Hola\"]"
p ['Hello',"G'day",'Bonjour','Hola'].to_s
# >> "HelloG'dayBonjourHola"
p Array.new.methods
# >> ["select", "[]=", "inspect", "compact"...]
monkey = 'baboon'
p local_variables
# >> ["monkey"]
class Something
def initialize
@x, @y = 'foo', 'bar'
@@class_variable = 'gorilla'
end
end
p Something.class_variables
# >> ["@@class_variable"]
s = Something.new
p s.instance_variables
# >> ["@x", "@y"]
p IO.constants
# >> ["TRUNC", "SEEK_END", "LOCK_SH"...]
p global_variables
# >> ["$-d", "$\"", "$$", "$<", "$_", "$-K"...]
En lugar de exigir 'PP' y el uso de PP, sólo tiene que hacer
p object
ejemplo Probado
require 'pp'
class A
def initialize
@a = 'somevar'
@b = [1,2,3]
@c = {'var' => 'val'}
end
end
a = A.new
pp a # Gives -> #<A:0x2c6d048 @a="somevar", @b=[1, 2, 3], @c={"var"=>"val"}>
p a # Gives -> #<A:0x2c6d048 @a="somevar", @b=[1, 2, 3], @c={"var"=>"val"}>. No need to require 'pp'
Consulta la guía para los carriles de depuración: http://guides.rubyonrails.com/debugging_rails_applications.html
consejos: script/consola es genial para probar cosas en el contexto de su aplicación script/servidor --debugger para iniciar el servidor con un depurador convertido en adelante, puede usar 'debug' en su código para entrar en un shell interactivo
Supongo que llego un poco tarde a esto, pero ¿qué pasa con logger.info [debug | warning]? Use esto desde Controladores y Modelos. Aparecerá en sus archivos de registro (desarrollo.log en modo dev); y el <%= debug("str: " + str) %>
mencionado anteriormente para las vistas.
Estas no son respuestas exactas a sus preguntas pero también se puede utilizar la escritura/consola para cargar su aplicación en los carriles a una sesión interactiva.
Por último, puede colocar el depurador en una línea de su aplicación de rieles y el navegador se "bloqueará" cuando su aplicación ejecute esta línea y podrá estar en una sesión de depuración desde la línea exacta donde colocó su depurador en el código fuente
He escrito este código en el controlador ---- def index @users = User.all end --- ahora quiero imprimir array Aplico esto <% = debug (@users)%> pero no funciona :( – Harman
Un enfoque me apoyo en una gran cantidad es la siguiente:
logger.debug "OBJECT: #{an_object.to_yaml}"
de fácil lectura, aunque puede ser un poco difícil de manejar para objetos grandes.
Sé que esta es una publicación anterior, pero es lo primero que aparece cuando busca "Ruby equivalent of PHP print_r". Estoy usando Ruby en el modo línea de comando, y realmente no hay un equivalente muy bueno. "pp" está bien para estructuras bastante simples, pero tan pronto como comienzas a anidar hashes en matrices en hashes en más matrices, se convierte en un revoltijo bastante rápido. Como no he encontrado una buena emulación de print_r, escribí una yo mismo. Es lo suficientemente bueno para mis propósitos, no demasiado complicado y pensé que lo compartiría para evitarle a otras personas algo de dolor de cabeza. Comparar la salida con el real PHP print_r
def print_r(inHash, *indent)
@indent = indent.join
if (inHash.class.to_s == "Hash") then
print "Hash\n#{@indent}(\n"
inHash.each { |key, value|
if (value.class.to_s =~ /Hash/) || (value.class.to_s =~ /Array/) then
print "#{@indent} [#{key}] => "
self.print_r(value, "#{@indent} ")
else
puts "#{@indent} [#{key}] => #{value}"
end
}
puts "#{@indent})\n"
elsif (inHash.class.to_s == "Array") then
print "Array\n#{@indent}(\n"
inHash.each_with_index { |value,index|
if (value.class.to_s == "Hash") || (value.class.to_s == "Array") then
print "#{@indent} [#{index}] => "
self.print_r(value, "#{@indent} ")
else
puts "#{@indent} [#{index}] => #{value}"
end
}
puts "#{@indent})\n"
end
# Pop last indent off
8.times {@indent.chop!}
end
He aquí un ejemplo (hecho desordenado con el propósito de mostrar por qué el print_r PHP es tan agradable):
carTools = [ "Socket Set", "Combination Wrenches", "Oil Filter puller", "Brake Compressor" ]
houseTools =[ "Circular Saw", "Miter Saw", "Drill" ]
garageItems = Hash["Car1" => "Ford Mustang", "Car2" => "Honda Civic", "Bike1" => "IronHorse"]
garageItems["Tools"] = Hash["Car Tools" => carTools, "House Tools" => houseTools]
constructionSupplies = Hash["Plywood" => ["3/4\" T&G Plywood Sheets", "1/2\" Plywood Sheets"],
"Boards" => ["2x4s", "2x6s", "Engineered I-Joists"],
"Drywall" => ["4x8 1/2\" Sheetrock", "Mesh tape", "Paper tape", "Joint compount"]]
carParts = Hash["Mustang" => ["Clutch", "Transmission", "3.55 Ring & Pinion Gears", "Differential", "30# Injectors", "Pro-M 77mm MAF"]]
garageItems["Supplies"] = ["Oil", "WD40", constructionSupplies, carParts, "Brake Fluid"]
print_r(garageItems)
salida de print_r (en realidad comprensible por un ser humano):
Hash
(
[Car1] => Ford Mustang
[Car2] => Honda Civic
[Bike1] => IronHorse
[Tools] => Hash
(
[Car Tools] => Array
(
[0] => Socket Set
[1] => Combination Wrenches
[2] => Oil Filter puller
[3] => Brake Compressor
)
[House Tools] => Array
(
[0] => Circular Saw
[1] => Miter Saw
[2] => Drill
)
)
[Supplies] => Array
(
[0] => Oil
[1] => WD40
[2] => Hash
(
[Plywood] => Array
(
[0] => 3/4" T&G Plywood Sheets
[1] => 1/2" Plywood Sheets
)
[Boards] => Array
(
[0] => 2x4s
[1] => 2x6s
[2] => Engineered I-Joists
)
[Drywall] => Array
(
[0] => 4x8 1/2" Sheetrock
[1] => Mesh tape
[2] => Paper tape
[3] => Joint compount
)
)
[3] => Hash
(
[Mustang] => Array
(
[0] => Clutch
[1] => Transmission
[2] => 3.55 Ring & Pinion Gears
[3] => Differential
[4] => 30# Injectors
[5] => Pro-M 77mm MAF
)
)
[4] => Brake Fluid
)
)
¿está en el archivo de la vista o en el controlador? – Harman