Есть ли эквивалент print_r или var_dump в Ruby/Ruby on Rails?

Я ищу способ сбросить структуру объекта, аналогичную функциям PHP print_r и var_dump для объяснения причин.

Ответ 1

Метод .inspect любого объекта должен форматироваться правильно для отображения, просто..

<%= theobject.inspect %>

Метод .methods также может быть полезен:

<%= theobject.methods.inspect %>

Это может помочь поместить это в теги <pre>, в зависимости от данных

Ответ 2

В представлениях:

include DebugHelper

...your code...

debug(object)

В контроллерах, моделях и другом коде:

puts YAML::dump(object)

Source

Ответ 3

В представлении вы можете использовать <%= debug(yourobject) %>, который будет генерировать YAML-представление ваших данных. Если вы хотите что-то в своем журнале, вы должны использовать logger.debug yourobject.inspect.

Ответ 4

Вы также можете использовать сокращение YAML:: dump (y) в консоли 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
>> 

Если вы хотите просто просмотреть содержимое строки, попробуйте использовать raise (например, в моделях, контроллерах или в другом недоступном месте). Вы получаете бесплатную обратную линию:)

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

Я также очень рекомендую попробовать ruby-debug:

Это невероятно полезно!

Ответ 5

Вы можете использовать puts some_variable.inspect. Или более короткая версия: p some_variable. И для более качественного вывода вы можете использовать драгоценный камень awesome_print.

Ответ 6

Если вы хотите, чтобы соответствующие данные отображались на stdout (вывод терминала, если вы работаете из командной строки), вы можете использовать p some_object.

Ответ 7

Предварительные ответы велики, но если вы не хотите использовать консоль (терминал), в Rails вы можете распечатать результат в представлении с помощью утилиты 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

(в браузере)

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

Ответ 8

Я использую это:)

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

Ответ 9

В последнее время я использую метод awesome_print ap, который работает как на консоли, так и в представлениях.

Цветной вывод, специфичный для конкретного типа, действительно имеет значение, если вам нужно визуально сканировать объекты String или Numeric (хотя мне пришлось немного подстроить мою таблицу стилей, чтобы получить отполированный вид)

Ответ 10

Недавно я стал фанатом PRY, я нашел это невероятно для выполнения таких задач, как проверка переменных, отладка исполняемого кода и проверка внешнего кода. Это может быть немного переполненным ответом на этот конкретный вопрос.