Czy istnieje odpowiednik print_r lub var_dump w Ruby / Ruby on Rails?


Odpowiedzi:


133

.inspectMetoda dowolnego obiektu powinny format jest poprawnie na wyświetlaczu, po prostu zrobić ..

<%= theobject.inspect %>

.methodsSposób ten może być także stosowane:

<%= theobject.methods.inspect %>

W <pre>zależności od danych może pomóc umieszczenie tego w tagach


2
to tylko oszczędność czasu dla tych, którzy szukają schludniejszego formatowania na konsoli:puts theobject.inspect.gsub(",", "\n")
Gus,

65

W widokach:

include DebugHelper

...your code...

debug(object)

W kontrolerach, modelach i innym kodzie:

puts YAML::dump(object)

Źródło


DebugHelper's debug (object) podnosi niezdefiniowaną metodę `DebugHelper's ':)
Arnold Roa

8

W widoku możesz użyć, <%= debug(yourobject) %>który wygeneruje widok YAML twoich danych. Jeśli chcesz coś znaleźć w swoim logu, powinieneś użyć logger.debug yourobject.inspect.


6

Możesz także użyć YAML :: dump shorthand ( y ) w konsoli Rails:

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

Jeśli chcesz po prostu przejrzeć zawartość łańcucha, spróbuj użyć podniesienia (na przykład w modelach, kontrolerach lub innym niedostępnym miejscu). Otrzymujesz ślad za darmo :)

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

Gorąco zachęcam do wypróbowania ruby-debug :

To niezwykle pomocne!



3

Jeśli chcesz tylko, aby odpowiednie dane były wyświetlane na stdout (dane wyjściowe terminala, jeśli korzystasz z wiersza poleceń), możesz użyć p some_object.


3

Wcześniejsze odpowiedzi są świetne, ale jeśli nie chcesz używać konsoli (terminala), w Railsach możesz wydrukować wynik w widoku za pomocą pomocnika Debug ActionView :: Helpers :: 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

wyniki (w przeglądarce)

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

Używam tego :)

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

Ostatnio używam metody awesome_print , apktóra działa zarówno na konsoli, jak iw widokach.

Kolorowe dane wyjściowe specyficzne dla typu naprawdę robią różnicę, jeśli musisz wizualnie przeskanować Stringlub Numericobiektów (chociaż musiałem trochę poprawić mój arkusz stylów, aby uzyskać dopracowany wygląd)


0

Ostatnio stałem się fanem PRY , odkryłem , że jest niesamowity do robienia takich rzeczy, jak sprawdzanie zmiennych, debugowanie uruchomionego kodu i inspekcja kodu zewnętrznego. Odpowiedź na to pytanie może być przesadą.

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.