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ó tương đương print_r hoặc var_dump trong Ruby/Ruby trên Rails không?
Trả lời
Phương pháp .inspect
của bất kỳ đối tượng cần định dạng là một cách chính xác để trưng bày, chỉ cần làm ..
<%= theobject.inspect %>
Phương pháp .methods
cũng có thể sử dụng:
<%= theobject.methods.inspect %>
Nó có thể giúp đưa rằng trong <pre>
thẻ, tùy thuộc vào dữ liệu
Nếu bạn chỉ muốn các dữ liệu có liên quan sẽ được hiển thị để stdout (đầu ra của thiết bị đầ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
.
Trong chế độ xem, bạn có thể sử dụng <%= debug(yourobject) %>
để tạo chế độ xem YAML cho dữ liệu của mình. Nếu bạn muốn một cái gì đó trong nhật ký của bạn, bạn nên sử dụng logger.debug yourobject.inspect
.
Bạn cũng có thể sử dụng YAML :: đổ viết tắt (y) dưới 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 muốn chỉ xem trước một số nội dung chuỗi, hãy thử sử dụng tăng (ví dụ như trong mô hình, bộ điều khiển hoặc một số nơi không thể tiếp cận khác). Bạn nhận được các vết lùi 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:
- 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
Đó là vô cùng helpf ul!
tôi sử dụng 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 awesome_print 's ap
phương pháp mà hoạt động trên giao diện điều khiển cũng như trong quan điểm.
Các loại cụ thể sản lượng màu thực sự làm cho một sự khác biệt nếu bạn cần để quét trực quan cho String
hoặc Numeric
đối tượng (Mặc dù tôi đã phải tinh chỉnh stylesheet của tôi một chút để có được một cái nhìn đánh bóng)
Gần đây tôi đã trở thành một fan hâm mộ của PRY, tôi đã tìm thấy nó vô cùng để làm những việc như kiểm tra các biến, gỡ lỗi chạy mã và kiểm tra mã bên ngoài. Nó có thể là một chút quá mức cần thiết như một câu trả lời cho câu hỏi cụ thể này.
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à cho đầu ra đẹp hơn, bạn có thể sử dụng awesome_print gem.
câu trả lời Prrevious là tuyệt vời nhưng nếu bạn không muốn sử dụng giao diện điều khiển (terminal), trong Rails bạn có thể in kết quả trong View bằng Helper của 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
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
- 1. Ẩn các trường lớp cụ thể khỏi print_r hoặc var_dump
- 2. php var_dump ($ object) hoặc print_r ($ object) vào tệp nhật ký
- 3. jQuery: print_r() hiển thị tương đương?
- 4. khó hiểu được print_r/var_dump cho đối tượng
- 5. Java tương đương với PHP var_dump là gì?
- 6. Có 'git sed' hoặc tương đương không?
- 7. Rails tương đương nhiều trong ASP.NET MVC3
- 8. Tương đương với Array.some trong ruby / rails
- 9. Có 'không tương đương' trong GORM không?
- 10. Có tương đương XDomainRequest trong Firefox không?
- 11. Có tương đương epoll trong Java không?
- 12. Có chức năng ngủ Jquery hoặc Javascript tương đương không?
- 13. Có tương đương MessageBox trong WPF không?
- 14. Có "\ n" tương đương trong VBScript không?
- 15. Có tương đương với Thực hiện trên Windows không?
- 16. Có tương đương với Valgrind cho .Net trên Windows không?
- 17. Powerhell có tương đương với popen không?
- 18. Có một lệnh nguồn tương đương trong Windows CMD như trong bash hoặc tcsh không?
- 19. Có tương đương <<< EOD trong Ruby/Rails không?
- 20. Có tương đương với Ruby on Rails 'respond_to format.xml, vv trong ASP.Net MVC không?
- 21. Có Python tương đương với HighLine không?
- 22. Scala ListBuffer (hoặc tương đương) shuffle
- 23. Có Java tương đương với libevent không?
- 24. Có tương đương Profiler cho MySql không?
- 25. C# có tương đương std :: nth_element không?
- 26. Có tương đương C# m_nCmdShow không?
- 27. Mercurial có tương đương git sạch không?
- 28. ldd tương đương trên android
- 29. Có tương đương WPF cho ToolStripButton không?
- 30. Xdebug có làm đẹp var_dump không?
vâng đây sẽ là câu trả lời IMHO –
này làm việc rất lớn cho tôi trong Sinatra. –
chỉ cần tiết kiệm thời gian cho những người tìm kiếm định dạng neater trong bảng điều khiển: 'đặt theobject.inspect.gsub (", "," \ n ")' – Gus