Я ищу способ сбрасывать структуру объекта, аналогично функциям PHP print_r
и var_dump
для объяснения причин.Есть ли эквивалент print_r или var_dump в Ruby/Ruby on Rails?
ответ
.inspect
метод любого объекта должен форматировать правильно для отображения, просто сделать ..
<%= theobject.inspect %>
Метод .methods
может также использоваться:
<%= theobject.methods.inspect %>
Это может помочь положить, что в <pre>
тегов, в зависимости от данных
Если вы просто хотите, соответствующие данные, которые будут отображаться на стандартный вывод (вывод терминала, если вы работаете из командной строки), вы можете использовать p some_object
.
В представлении вы можете использовать <%= debug(yourobject) %>
, который будет генерировать YAML-представление ваших данных. Если вы хотите что-то в своем журнале, вы должны использовать logger.debug yourobject.inspect
.
Вы также можете использовать YAML :: дамп стенографии (у) под 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
>>
Я также очень рекомендую вам попробовать рубиново-отладки:
- 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
Это невероятно помочь уль!
Я использую это :)
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 «s ap
метод, который работает на консоли, а также в представлениях.
Типа конкретного цвета выход действительно имеет значение, если вам нужно визуально сканировать String
или Numeric
объектов (Хотя я должен был настроить мою таблицу стилей немного для того, чтобы получить полированный вид)
Недавно я стали фанатом PRY, я нашел это невероятно для выполнения таких вещей, как проверка переменных, отладка исполняемого кода и проверка внешнего кода. Это может быть немного излишним ответом на этот конкретный вопрос.
Вы можете использовать puts some_variable.inspect
. Или более короткая версия: p some_variable
. И для более качественного вывода вы можете использовать awesome_print gem.
Prrevious ответы велики, но если вы не хотите использовать консоль (терминал), в Rails можно распечатать результат в представлении с помощью помощника Отладочного в 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
да это должно быть ответом IMHO –
Это работало отлично подходит для меня в Синатры. –
просто хранитель времени для тех, кто ищет форматирование в консоли: 'puts theobject.inspect.gsub (", "," \ n ")' – Gus