Ruby / Ruby on Rails'de print_r veya var_dump eşdeğeri var mı?


111

PHP işlevlerine benzer print_rve var_dumphata ayıklama nedenleriyle bir nesnenin yapısını dökmenin bir yolunu arıyorum .

Yanıtlar:


133

.inspectBiçimlendirmeliyim herhangi bir nesnenin yöntem görüntülenmesi için, sadece yapmak doğru değildir ..

<%= theobject.inspect %>

.methodsYöntem ayrıca, yararlı olabilir:

<%= theobject.methods.inspect %>

<pre>Verilere bağlı olarak bunu etiketlere koymak yardımcı olabilir


2
konsolda daha düzgün biçimlendirme arayanlar için sadece bir zaman tasarrufu:puts theobject.inspect.gsub(",", "\n")
Gus

65

Görünümlerde:

include DebugHelper

...your code...

debug(object)

Denetleyicilerde, modellerde ve diğer kodlarda:

puts YAML::dump(object)

Kaynak


DebugHelper'ın hata ayıklaması (nesnesi) tanımsız `` DebugHelper '' yöntemini yükseltir :)
Arnold Roa

8

Bir görünümde <%= debug(yourobject) %>, verilerinizin YAML görünümünü oluşturacak olanı kullanabilirsiniz . Günlüğünüzde bir şey istiyorsanız, kullanmalısınız logger.debug yourobject.inspect.


6

Ayrıca Rails konsolu altında YAML :: dump shorthand ( y ) kullanabilirsiniz :

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

Yalnızca bazı dize içeriklerini önizlemek istiyorsanız, yükseltme kullanmayı deneyin (örneğin modellerde, denetleyicilerde veya erişilemeyen başka yerlerde). Geri izlemeyi ücretsiz alırsınız :)

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

Ayrıca Ruby debug'ı denemenizi de gerçekten tavsiye ediyorum :

İnanılmaz derecede faydalı!



3

Sadece ilgili verilerin stdout'ta görüntülenmesini istiyorsanız (komut satırından çalıştırıyorsanız terminal çıkışı), kullanabilirsiniz p some_object.


3

Önceden verilen yanıtlar harikadır ancak konsolu (terminal) kullanmak istemiyorsanız, Rails'de hata ayıklamanın Helper ActionView :: Helpers :: DebugHelper'ı kullanarak sonucu Görünüm'de yazdırabilirsiniz.

#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

sonuçlar (tarayıcıda)

- !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

Bunu kullanıyorum :)

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

Son zamanlarda kullanıyorum awesome_print 'ın apkonsolda yanı sıra görünümlerinde veren yöntemi.

Türe özgü renkli çıktı, nesneleri Stringveya Numericnesneleri görsel olarak taramanız gerektiğinde gerçekten bir fark yaratır (Parlak bir görünüm elde etmek için stil sayfamı biraz değiştirmem gerekse de )


0

Son zamanlarda bir PRY hayranı oldum, değişkenleri incelemek, çalışan kodda hata ayıklamak ve harici kodu incelemek gibi şeyler yaptığım için onu inanılmaz buldum. Bu özel sorunun cevabı olarak biraz fazla olabilir.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.