2009-01-29 11 views

उत्तर

33

रेल टेम्पलेट्स में आप

<%= debug an_object %> 

कर सकते हैं और यह अच्छा एचटीएमएल प्री आउटपुट करेगा।

+0

क्या यह फ़ाइल या नियंत्रक को देखने में है? – Harman

15

पीपी उपयोग करने का प्रयास आप इसे (या आईआरबी में अपने .irbc पहले से ही ऐसा नहीं करती है तो) लिपियों में की आवश्यकता होती है की आवश्यकता होगी:। एक वस्तु इस प्रकार

require 'pp' 

तो आप कर सकते हैं 'PrettyPrint':

pp object 
6

विधि inspect है जो मदद करता है। कभी-कभी किसी ऑब्जेक्ट पर to_s विधि को कॉल करने में मदद मिलेगी (to_s ऑब्जेक्ट का स्ट्रिंग प्रस्तुति देता है)। आप methods, local_variables, class_variables, instance_variables, constants और 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
इसके बजाय 'पीपी' और पीपी का उपयोग कर की आवश्यकता होती है की

, तो आप बस

p object 

कर सकते हैं परीक्षण उदाहरण

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

बाहर चेक डिबगिंग रेल के लिए गाइड: http://guides.rubyonrails.com/debugging_rails_applications.html

संकेत: स्क्रिप्ट/कंसोल एक डिबगर की ओर मुड़े हुए सर्वर शुरू करने के लिए अपने अनुप्रयोग स्क्रिप्ट/सर्वर --debugger के संदर्भ में सामान की कोशिश करना बहुत अच्छा है पर, आप इंटरैक्टिव शैल

0

पर विचार करने के लिए अपने कोड में 'डीबग' का उपयोग कर सकते हैं मान लीजिए कि मुझे थोड़ा देर हो चुकी है, लेकिन logger.info [डीबग | चेतावनी] के बारे में क्या है? इसे नियंत्रकों और मॉडल से प्रयोग करें। यह आपकी लॉग फ़ाइलों में दिखाई देगा (विकास मोड में जब देव मोड में); और उपरोक्त उल्लिखित <%= debug("str: " + str) %> विचारों के लिए।

ये आपके प्रश्नों के सटीक उत्तर नहीं हैं लेकिन आप अपने रेल ऐप को एक इंटरैक्टिव सत्र में लोड करने के लिए स्क्रिप्ट/कंसोल का भी उपयोग कर सकते हैं।

आखिरकार, आप अपने रेल एप्लिकेशन के एक लाइन में डीबगर डाल सकते हैं और जब आपका ऐप इस लाइन को निष्पादित करता है तो ब्राउजर "लटका" देगा और आप अपने डीबगर को सही लाइन से डीबग सत्र में रह सकेंगे स्रोत कोड में। हालांकि यह बड़ी वस्तुओं के लिए एक छोटे से बोझल प्राप्त कर सकते हैं,

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

आसान को पढ़ने के लिए:

+0

मैंने इस कोड को नियंत्रक में लिखा है ---- डीफ़ इंडेक्स @users = user.all end --- अब मैं सरणी मुद्रित करना चाहता हूं, मैं इसे <% = डीबग (@users)%> लागू करता हूं लेकिन काम नहीं कर रहा हूं :( – Harman

1

एक दृष्टिकोण मैं एक बहुत पर दुबला यह है।

5

मुझे पता है कि यह एक पुरानी पोस्ट है, लेकिन यह पहली बात है कि Google PHP प्रिंट_आर के रूबी समकक्ष की खोज करते समय पॉप अप करता है। मैं कमांड लाइन मोड में रूबी का उपयोग कर रहा हूं, और वास्तव में बहुत अच्छा समकक्ष नहीं है। "पीपी" काफी सरल संरचनाओं के लिए ठीक है, लेकिन जैसे ही आप अधिक सरणी में हैश में सरणी में घोंसले के घोंसले शुरू करते हैं, यह बहुत तेज़ हो जाता है। चूंकि मुझे print_r का अच्छा अनुकरण नहीं मिला है, इसलिए मैंने खुद को लिखा है। यह मेरे उद्देश्यों के लिए काफी अच्छा है, अत्यधिक जटिल नहीं है और मैंने सोचा कि मैं इसे अन्य लोगों को कुछ सिरदर्द बचाने के लिए साझा करूंगा। 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 

यहाँ के साथ उत्पादन के लिए एक उदाहरण की तुलना में (उद्देश्य पर गंदा कर दिया दिखाने के लिए क्यों पीएचपी print_r इतना अच्छा है):

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 (वास्तव में एक मानव द्वारा सुबोध) का आउटपुट:

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 
      ) 
    ) 
संबंधित मुद्दे