Существует ли print_r или var_dump эквивалент в Ruby / Ruby on Rails?

Давайте сначала проверим вывод внутреннего printf:

/n, 1, 0, 0, 0

Теперь вам нужно рассмотреть 2 вещи:

1) You have to take escape sequences like '\n','\t' etc into account.
2) You have to take 1 escape sequence as 1 character (not 2)

Внешний printf возвращает фактическое количество символов внутреннего printf, которое равно 5. Таким образом, внешний printf возвращает 5.

105
задан Daniel Rikowski 24 May 2009 в 17:59
поделиться

6 ответов

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

<%= theobject.inspect %>

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

<%= theobject.methods.inspect %>

Это может помочь поместить это в теги

 , в зависимости от данных 

130
ответ дан 24 November 2019 в 03:58
поделиться

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

include DebugHelper

...your code...

debug(object)

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

puts YAML::dump(object)

Источник

64
ответ дан 24 November 2019 в 03:58
поделиться

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

8
ответ дан 24 November 2019 в 03:58
поделиться

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

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

6
ответ дан 24 November 2019 в 03:58
поделиться

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

3
ответ дан 24 November 2019 в 03:58
поделиться

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

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
ответ дан 24 November 2019 в 03:58
поделиться
Другие вопросы по тегам:

Похожие вопросы: