Tôi đang tìm cách kết xuất cấu trúc của một đối tượng, tương tự như các hàm PHP print_r
và var_dump
vì lý do gỡ lỗi.
Tôi đang tìm cách kết xuất cấu trúc của một đối tượng, tương tự như các hàm PHP print_r
và var_dump
vì lý do gỡ lỗi.
Câu trả lời:
Trong các lượt xem:
include DebugHelper
...your code...
debug(object)
Trong bộ điều khiển, kiểu máy và mã khác:
puts YAML::dump(object)
Bạn cũng có thể sử dụng YAML :: dump viết tắt ( y ) trong Rails console:
>> 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
>>
Nếu bạn chỉ muốn xem trước một số nội dung chuỗi, hãy thử sử dụng tăng (ví dụ: trong các mô hình, bộ điều khiển hoặc một số nơi không thể truy cập khác). Bạn nhận được backtrace miễn phí :)
>> raise Rails.root
RuntimeError: /home/marcin/work/github/project1
from (irb):17
>>
Tôi cũng thực sự khuyến khích bạn thử ruby-debug :
Nó vô cùng hữu ích!
Bạn có thể sử dụng puts some_variable.inspect
. Hoặc phiên bản ngắn hơn: p some_variable
. Và để có kết quả đẹp hơn, bạn có thể sử dụng đá quý awesome_print .
Nếu bạn chỉ muốn dữ liệu có liên quan được hiển thị trên stdout (kết quả đầu cuối nếu bạn đang chạy từ dòng lệnh), bạn có thể sử dụng p some_object
.
Câu trả lời rõ ràng là rất tốt nhưng nếu bạn không muốn sử dụng bảng điều khiển (thiết bị đầu cuối), trong Rails, bạn có thể in kết quả trong Chế độ xem bằng cách sử dụng Trình trợ giúp của gỡ lỗi 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
kết quả (trong trình duyệt)
- !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
Tôi sử dụng cái này :)
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
Gần đây, tôi đang sử dụng phương pháp awesome_print 's ap
hoạt động trên bảng điều khiển cũng như trong các khung nhìn.
Đầu ra có màu cụ thể cho từng loại thực sự tạo ra sự khác biệt nếu bạn cần quét trực quan String
hoặc Numeric
đối tượng (Mặc dù tôi đã phải chỉnh sửa biểu định kiểu của mình một chút để có được giao diện bóng bẩy)
Gần đây, tôi đã trở thành một fan hâm mộ của PRY , tôi thấy nó vô cùng tuyệt vời khi làm những việc như kiểm tra các biến, gỡ lỗi mã đang chạy và kiểm tra mã bên ngoài. Đó có thể là một câu trả lời cho câu hỏi cụ thể này hơi quá mức cần thiết.
puts theobject.inspect.gsub(",", "\n")