अधिकांश अपवाद अप्रत्याशित डेटा के कारण होते हैं जो उन मेथड को पास किए जाते हैं जो अन्यथा ठीक काम करते हैं, इसलिए अपने एप्लिकेशन के माध्यम से डेटा के एक टुकड़े को ट्रेस करना अक्सर त्रुटि का कारण खोजने के लिए उपयोगी होता है। इस लेख में, हम रूबी और रेल्स एप्लिकेशन में डेटा निरीक्षण पर जाएंगे।
puts, #inspect और p
रूबी का puts मेथड कंसोल पर एक संदेश प्रिंट करने के लिए उपयोग किया जाता है।
unknown = "यह एक स्ट्रिंग है"
puts unknown
उपरोक्त स्क्रिप्ट चलाने पर, मान कंसोल पर प्रिंट आउट होता है ताकि आप देख सकें कि अंदर क्या है।
$ ruby puts.rb
यह एक स्ट्रिंग है
हालांकि, यदि unknown वेरिएबल एक खाली स्ट्रिंग, एक nil मान या एक खाली हैश रखता है, तो puts एक खाली लाइन प्रिंट करेगा। इसके साथ, आप उसका सटीक मान नहीं देख पाएंगे, और आप खाली हैश और स्ट्रिंग के बीच अंतर नहीं कर पाएंगे, उदाहरण के लिए।
$ ruby puts_empty_string.rb
सौभाग्य से, एक इंस्टेंस मेथड है जिसका नाम inspect है, जो आपके द्वारा सामना किए जाने वाले हर ऑब्जेक्ट पर लागू होता है। यह ऑब्जेक्ट का एक स्ट्रिंग प्रतिनिधित्व लौटाएगा।
unknown = ""
puts unknown.inspect
एक खाली स्ट्रिंग के लिए, यह उद्धरणों की एक जोड़ी लौटाएगा, और एक सरणी के लिए, यह कोष्ठक की एक जोड़ी लौटाएगा।
$ ruby inspect_empty_string.rb
""
$ ruby inspect_empty_array.rb
[]
चूंकि puts और inspect का संयोजन बहुत बार उपयोग किया जाता है, इसलिए एक शॉर्टकट है जो दोनों को एक साथ करता है, जिसे p कहा जाता है। यह वही काम करता है, लेकिन टाइप करना तेज़ है।
unknown = ""
p unknown # `puts unknown.inspect` के बराबर
रेल्स व्यू में डेटा निरीक्षण
हालांकि p शॉर्टकट है, फिर भी inspect मेथड के बारे में जानना उपयोगी है जब आपको कंसोल पर प्रिंट किए बिना किसी ऑब्जेक्ट का स्ट्रिंग प्रतिनिधित्व चाहिए।
उदाहरण के लिए, रेल्स व्यू में, कभी-कभी लॉग में इसे खोजने के बजाय मान को परिणामी HTML पेज पर प्रिंट करना अधिक उपयोगी होता है।
<%= params.inspect %>
अधिक जटिल डेटा संरचनाओं का निरीक्षण करते समय, आप जिस डेटा की तलाश कर रहे हैं उसे ढूंढना कभी-कभी मुश्किल होता है, क्योंकि निरीक्षित मान एक ही लाइन पर प्रिंट होता है।
रेल्स इससे निपटने के लिए debug हेल्पर प्रदान करता है। केवल मान का निरीक्षण करने के बजाय, यह ऑब्जेक्ट को मानव-पठनीय YAML प्रतिनिधित्व में बदल देगा और इसे फॉर्मेटिंग को संरक्षित करने के लिए <pre> टैग में डाल देगा।
<%= debug params %>
debug हेल्पर हुड के तहत YAML प्रतिनिधित्व प्राप्त करने के लिए to_yaml मेथड का उपयोग करता है, इसे <pre> ब्लॉक में लपेटने से पहले। किसी ऑब्जेक्ट को <pre> टैग में लपेटे बिना YAML प्रतिनिधित्व में बदलने के लिए, आप किसी भी ऑब्जेक्ट पर सीधे #to_yaml का उपयोग कर सकते हैं।
irb(main):004:0* puts Product.first.to_yaml
--- !ruby/object:Product
concise_attributes:
- !ruby/object:ActiveRecord::Attribute::FromDatabase
name: id
value_before_type_cast: 4
- !ruby/object:ActiveRecord::Attribute::FromDatabase
name: title
value_before_type_cast: Title
....
जैसा कि आप उम्मीद करते आए हैं, किसी ऑब्जेक्ट के YAML प्रतिनिधित्व को प्रिंट करने के लिए एक शॉर्टकट भी है। ऊपर का उदाहरण y Product.first का उपयोग करके एक ही बार में बुलाया जा सकता है।
irb(main):004:0* y Product.first # `puts Product.first.to_yaml` के बराबर
--- !ruby/object:Product
...
"puts"-डिबगिंग
आपके एप्लिकेशन में डेटा निरीक्षण के और भी तरीके हैं, जैसे Pry लाइब्रेरी और रूबी का अपना डिबगर। हालांकि अन्य डेटा निरीक्षण विधियों की जांच करना निश्चित रूप से एक अच्छा विचार है, कंसोल पर लॉग लिखना या व्यू में डेटा का एक टुकड़ा दिखाना अक्सर यह पता लगाने का सबसे तेज़ तरीका होता है कि क्या हो रहा है।
हमें यह जानकर खुशी होगी कि आपको यह लेख कैसा लगा, यदि आपके कोई प्रश्न हैं, और आप आगे क्या पढ़ना चाहेंगे, तो @AppSignal पर हमें बताना सुनिश्चित करें।