Чи є еквівалент print_r або var_dump в Ruby / Ruby on Rails?


Відповіді:


133

.inspectМетод будь-якого об'єкта повинен форматувати правильно для відображення, просто робити ..

<%= theobject.inspect %>

.methodsСпосіб також може бути корисно:

<%= theobject.methods.inspect %>

Це може допомогти помістити це в <pre>теги, залежно від даних


2
просто час для тих, хто шукає чистішого форматування в консолі:puts theobject.inspect.gsub(",", "\n")
Gus


8

У вікні ви можете використовувати, <%= debug(yourobject) %>який генеруватиме перегляд YAML ваших даних. Якщо ви хочете щось у своєму журналі, вам слід скористатися logger.debug yourobject.inspect.


6

Ви також можете використовувати 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 Rails.root
RuntimeError: /home/marcin/work/github/project1
    from (irb):17
>> 

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

Це неймовірно корисно!



3

Якщо ви просто хочете, щоб відповідні дані виводилися на stdout (термінальний вихід, якщо ви працюєте з командного рядка), ви можете використовувати p some_object.


3

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

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 та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.