2009-01-29 26 views

Respuesta

33

En las plantillas Rieles usted puede hacer

<%= debug an_object %> 

y hará una buena salida HTML PRE.

+0

¿está en el archivo de la vista o en el controlador? – Harman

15

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 
6

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"...] 
10

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' 
2

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

0

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

+0

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

1

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.

5

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 
      ) 
    ) 
Cuestiones relacionadas