Я ищу способ сбросить структуру объекта, аналогичную функциям PHP print_r
и var_dump
для объяснения причин.
Есть ли эквивалент print_r или var_dump в Ruby/Ruby on Rails?
Ответ 1
Метод .inspect
любого объекта должен форматироваться правильно для отображения, просто..
<%= theobject.inspect %>
Метод .methods
также может быть полезен:
<%= theobject.methods.inspect %>
Это может помочь поместить это в теги <pre>
, в зависимости от данных
Ответ 2
В представлениях:
include DebugHelper
...your code...
debug(object)
В контроллерах, моделях и другом коде:
puts YAML::dump(object)
Ответ 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:
- http://railscasts.com/episodes/54-debugging-with-ruby-debug
- http://www.sitepoint.com/article/debug-rails-app-ruby-debug/
- http://www.datanoise.com/articles/2006/7/12/tutorial-on-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, я нашел это невероятно для выполнения таких задач, как проверка переменных, отладка исполняемого кода и проверка внешнего кода. Это может быть немного переполненным ответом на этот конкретный вопрос.