Hầu hết exception do unexpected data truyền cho method hoạt động tốt bình thường, nên thường hữu ích trace dữ liệu qua ứng dụng tìm nguyên nhân lỗi. Bài này đi qua inspect data trong Ruby và Rails applications.
puts, #inspect và p
Method puts của Ruby in message ra console.
unknown = "This is a string" puts unknownKhi chạy script, value in ra để bạn thấy bên trong.
$ ruby puts.rb This is a string Tuy nhiên, nếu biến unknown giữ empty string, giá trị nil hoặc empty hash, puts in dòng trống. Với đó, bạn không thấy exact value, không phân biệt empty hash và string.
$ ruby puts_empty_string.rb May mắn thay, có instance method tên inspect, implement trên mọi object bạn gặp. Nó trả về string representation của object.
unknown = "" puts unknown.inspectVới empty string, nó trả về cặp quotes, với array, trả về cặp brackets.
$ ruby inspect_empty_string.rb "" $ ruby inspect_empty_array.rb [] Vì combo puts và inspect dùng nhiều, có shortcut làm cả hai cùng lúc, tên p. Làm y hệt nhưng gõ nhanh hơn.
unknown = "" p unknown # equivalent to `puts unknown.inspect`Inspect Data Trong Rails Views
Mặc dù có shortcut p, vẫn hữu ích biết inspect method khi cần string representation của object không in ra console.
Trong Rails view, ví dụ, đôi khi hữu ích in value ra HTML page kết quả thay vì tìm trong log.
<%= params.inspect %>Khi inspect cấu trúc data phức tạp, đôi khi khó tìm data cần thiết, vì inspected value in trên một dòng.
Rails cung cấp helper debug giải quyết điều này. Thay vì chỉ inspect value, nó convert object thành human readable YAML representation và đặt trong thẻ <pre> để preserve formatting.
<%= debug params %>Helper debug dùng method to_yaml bên dưới để lấy YAML representation, trước khi wrap trong block <pre>. Để convert object thành YAML representation không wrap <pre> tag, dùng #to_yaml trên object trực tiếp.
irb(main):004:0* puts Product.first.to_yaml --- !ruby/object:Product concise_attributes: - !ruby/object:ActiveRecord::Attribute::FromDatabase name: id value_before_type_cast: 4 - !ruby/object:ActiveRecord::Attribute::FromDatabase name: title value_before_type_cast: Title ....Như mong đợi, có shortcut in YAML representation của object. Ví dụ trên gọi một lần bằng y Product.first.
irb(main):004:0* y Product.first # equivalent to `puts Product.first.to_yaml` --- !ruby/object:Product ..."puts"-debugging
Còn nhiều cách inspect data trong ứng dụng, như thư viện Pry và debugger của Ruby. Mặc dù tốt khi xem methods khác, ghi log ra console hoặc show data trong view thường là cách nhanh nhất tìm ra chuyện gì xảy ra.
Chúng tôi rất muốn biết bạn thấy bài này như thế nào, nếu có câu hỏi, và bạn muốn đọc chủ đề gì tiếp theo, hãy cho chúng tôi biết @AppSignal.