2009-01-29 15 views

cevap

33

Test örneği

p object 

yapabilirsiniz ve güzel HTML PRE çıkışı yapacak.

+0

bu dosya veya denetleyicide mi var? – Harman

15

s kullanmayı deneyin (veya irb da .irbc zaten bu yapmazsa) komut bunu gerektirir gerekir. Sonra

require 'pp' 

yapabilirsiniz 'PrettyPrint' Bir nesneyi böylece:

pp object 
6

inspect yönteminde yardımcı olan bir yöntem vardır. Bazen bir nesne üzerinde to_s yöntemini çağırmak yardımcı olacaktır (to_s, nesnenin bir dizgi temsilini döndürür). Ayrıca, methods, local_variables, class_variables, instance_variables, constants ve global_variables sorgulayabilirsiniz. Bunun yerine 's' ve pp kullanarak gerektiren

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

, sadece sen

<%= debug an_object %> 

yapabilirsiniz Raylar şablonda

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

Kontrol dışarı ayıklama rayları için rehber: http://guides.rubyonrails.com/debugging_rails_applications.html

ipuçları: komut/konsol döndü bir hata ayıklayıcı ile sunucuyu başlatmak için uygulama komut/sunucunun --debugger bağlamında şeyler denemek için harika Ondan sonra, kodunuzdaki 'debug' komutunu interaktif bir kabukta kullanabilirsiniz.

0

Sanırım biraz geç kaldım, ama logger.info [debug | warning] hakkında ne haber? Bunu Kontrolörlerden ve Modellerden kullanın. Günlük dosyalarınızda görünecektir (dev modda iken development.log); ve görünümler için yukarıda belirtilen <%= debug("str: " + str) %>.

Bunlar, sorularınızın tam olarak yanıtı değildir, ancak raylar uygulamanızı etkileşimli bir oturuma yüklemek için komut dosyasını/konsolu da kullanabilirsiniz. Son olarak, ray uygulamanızın bir satırına hata ayıklayıcısını yerleştirebilirsiniz ve uygulama bu satırı yürüttüğünde tarayıcı "askıda kal" olacak ve tam satırdan bir hata ayıklama oturumunda bulunabileceksiniz. kaynak kodunda. o büyük nesneler için biraz hantal alabilirsiniz, ancak, okumayı

logger.debug "OBJECT: #{an_object.to_yaml}" 

Kolay: Ben çok dayanacağı

+0

Bu kodu yazmacı denetleyicisi ---- def dizinine yazarım. @users = Kullanıcı.all son --- şimdi diziyi yazdırmak istiyorum Bunu uygulamak istiyorum <% = debug (@users)%> fakat çalışmıyor :( – Harman

1

bir yaklaşım budur.

5

Bunun eski bir yayın olduğunu biliyorum, ancak Google'ın "Ruby print of print_r" eşdeğeri için arama yapması gereken ilk şey. Komut satırı modunda Ruby kullanıyorum ve gerçekten çok iyi bir eşdeğer değil. Oldukça basit yapılar için "pp" tamam, ama daha fazla dizide karma halinde dizilerdeki karmaları yerleştirmeye başladığınızda, oldukça hızlı bir karmaşaya dönüşüyor. İyi bir print_r öyküsü bulamadığım için kendim yazdım. Amaçlarım için yeterince iyi, aşırı karmaşık değil ve diğer insanlara bazı baş ağrısını kurtarmak için paylaşacağımı düşündüm. (PHP print_r çok güzel neden göstermek için bilerek dağınık yapılan) bir örnek Burada 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 

ile çıkış var karşılaştırın:

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) 

print_r (a insan tarafından aslında anlaşılır) Çıktı:

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 
      ) 
    ) 
İlgili konular