क्या रूबी / रूबी में रेल्स पर एक प्रिंट_आर या वेर_डम्प बराबर है?


111

मैं PHP कार्यों के समान print_rऔर var_dumpडिबगिंग कारणों के लिए किसी ऑब्जेक्ट की संरचना को डंप करने का एक तरीका ढूंढ रहा हूं ।

जवाबों:


133

.inspectकिसी भी ऑब्जेक्ट की विधि को प्रदर्शन के लिए सही ढंग से प्रारूपित करना चाहिए, बस करें ।।

<%= theobject.inspect %>

.methodsविधि को भी काम का हो सकता है:

<%= theobject.methods.inspect %>

यह <pre>डेटा के आधार पर टैग में डालने में मदद कर सकता है


2
सांत्वना में नीटर फॉर्मेटिंग की तलाश करने वालों के लिए सिर्फ एक समय बचाने वाला:puts theobject.inspect.gsub(",", "\n")
गस


8

एक दृश्य में आप उपयोग कर सकते हैं <%= debug(yourobject) %>जो आपके डेटा के एक YAML दृश्य उत्पन्न करेगा। यदि आप अपने लॉग में कुछ चाहते हैं तो आपको उपयोग करना चाहिए logger.debug yourobject.inspect


6

आप रेल्स कंसोल के नीचे YAML :: डंप शॉर्टहैंड ( y ) का भी उपयोग कर सकते हैं :

>> y User.first
--- !ruby/object:User 
attributes: 
  created_at: 2009-05-24 20:16:11.099441
  updated_at: 2009-05-26 22:46:29.501245
  current_login_ip: 127.0.0.1
  id: "1"
  current_login_at: 2009-05-24 20:20:46.627254
  login_count: "1"
  last_login_ip: 
  last_login_at: 
  login: admin
attributes_cache: {}

=> nil
>> 

यदि आप कुछ स्ट्रिंग सामग्री का पूर्वावलोकन करना चाहते हैं, तो बढ़ाने का उपयोग करने का प्रयास करें (उदाहरण के लिए मॉडल, नियंत्रक या कुछ अन्य दुर्गम स्थान पर)। आपको मुफ्त में बैकट्रेस मिलेगा :)

>> raise Rails.root
RuntimeError: /home/marcin/work/github/project1
    from (irb):17
>> 

मैं वास्तव में आपको रूबी-डिबग की कोशिश करने के लिए प्रोत्साहित करता हूं :

यह अविश्वसनीय रूप से उपयोगी है!



3

यदि आप चाहते हैं कि संबंधित डेटा को stdout में प्रदर्शित किया जाए (यदि आप कमांड लाइन से चल रहे हैं तो टर्मिनल आउटपुट), आप उपयोग कर सकते हैं p some_object


3

स्पष्ट उत्तर महान हैं, लेकिन यदि आप कंसोल (टर्मिनल) का उपयोग नहीं करना चाहते हैं, तो रेल में आप डीबग के हेल्पर एक्शन व्यू का उपयोग करके परिणाम को प्रिंट कर सकते हैं :: सहायकों :: DebugHelper

#app/view/controllers/post_controller.rb
def index
 @posts = Post.all
end

#app/view/posts/index.html.erb
<%= debug(@posts) %>

#start your server
rails -s

परिणाम (ब्राउज़र में)

- !ruby/object:Post
  raw_attributes:
    id: 2
    title: My Second Post
    body: Welcome!  This is another example post
    published_at: '2015-10-19 23:00:43.469520'
    created_at: '2015-10-20 00:00:43.470739'
    updated_at: '2015-10-20 00:00:43.470739'
  attributes: !ruby/object:ActiveRecord::AttributeSet
    attributes: !ruby/object:ActiveRecord::LazyAttributeHash
      types: &5
        id: &2 !ruby/object:ActiveRecord::Type::Integer
          precision: 
          scale: 
          limit: 
          range: !ruby/range
            begin: -2147483648
            end: 2147483648
            excl: true
        title: &3 !ruby/object:ActiveRecord::Type::String
          precision: 
          scale: 
          limit: 
        body: &4 !ruby/object:ActiveRecord::Type::Text
          precision: 
          scale: 
          limit: 
        published_at: !ruby/object:ActiveRecord::AttributeMethods::TimeZoneConversion::TimeZoneConverter
          subtype: &1 !ruby/object:ActiveRecord::Type::DateTime
            precision: 
            scale: 
            limit: 
        created_at: !ruby/object:ActiveRecord::AttributeMethods::TimeZoneConversion::TimeZoneConverter
          subtype: *1
        updated_at: !ruby/object:ActiveRecord::AttributeMethods::TimeZoneConversion::TimeZoneConverter
          subtype: *1

0

मैं यह प्रयोग :)

require 'yaml'

module AppHelpers
  module Debug
    module VarDump

      class << self

        def dump(dump_object, file_path)
          File.open file_path, "a+" do |log_file|
            current_date = Time.new.to_s + "\n" + YAML::dump(dump_object) + "\n"
            log_file.puts current_date
            log_file.close
          end
        end

      end

    end
  end
end

0

हाल ही में मैंने उपयोग कर रहा हूँ awesome_print की apविधि है जो कंसोल पर और साथ ही विचारों में काम करता है।

यदि आप Stringया Numericवस्तुओं के लिए नेत्रहीन स्कैन करने की जरूरत है, तो टाइप-विशिष्ट रंगीन आउटपुट वास्तव में एक फर्क पड़ता है (हालांकि एक पॉलिश लुक पाने के लिए मुझे अपनी स्टाइलशीट को थोड़ा मोड़ना पड़ा)


0

हाल ही में मैं PRY का प्रशंसक बन गया हूँ, मैंने इसे अविश्वसनीय रूप से वेरिएबल्स का निरीक्षण करने, रनिंग कोड डिबग करने और बाहरी कोड का निरीक्षण करने जैसी चीजों के लिए अविश्वसनीय रूप से पाया है। इस विशिष्ट प्रश्न के उत्तर के रूप में यह थोड़ा ओवरकिल हो सकता है।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.