Я шукаю спосіб скинути структуру об'єкта, подібну до функцій PHP print_r
та var_dump
з причин налагодження.
Я шукаю спосіб скинути структуру об'єкта, подібну до функцій PHP print_r
та var_dump
з причин налагодження.
Відповіді:
У переглядах:
include DebugHelper
...your code...
debug(object)
У контролерах, моделях та іншому коді:
puts YAML::dump(object)
Ви також можете використовувати 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 :
Це неймовірно корисно!
Можна використовувати puts some_variable.inspect
. Або скорочений варіант: p some_variable
. А для кращого виходу, ви можете використовувати дорогоцінний камінь awesome_print .
Якщо ви просто хочете, щоб відповідні дані виводилися на stdout (термінальний вихід, якщо ви працюєте з командного рядка), ви можете використовувати p some_object
.
Попередні відповіді чудові, але якщо ви не хочете використовувати консоль (термінал), у 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
Я цим користуюся :)
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
Останнім часом я використовую метод awesome_print , ap
який працює як на консолі, так і у видах.
Кольоровий вихід, характерний для типу, дійсно має значення, якщо вам потрібно візуально сканувати String
або Numeric
об'єкти (хоча мені довелося трохи підправити таблицю стилів, щоб отримати відшліфований вигляд)
Нещодавно я став фанатом PRY , і мені це було неймовірно для того, щоб робити такі речі, як перевірка змінних, налагодження запущеного коду та перевірка зовнішнього коду. Це може бути трохи надмірності як відповідь на це конкретне питання.
puts theobject.inspect.gsub(",", "\n")