2012-03-09 31 views
6

Tôi đã dọn internet tốt nhất có thể cho vấn đề này, nhưng tôi hoàn toàn bị bẻ khóa bởi từ khóa nhị phân như các công cụ tìm kiếm (bao gồm cả tìm kiếm nội bộ của stackoverflow!)Rails debug method only output! Các giá trị nhị phân

Tôi đang làm việc qua tu viện Rails tại số http://ruby.railstutorial.org - phần lớn phần lớn là tài nguyên tuyệt vời. Một trong những điều hữu ích mà tôi có ở dưới cùng của trang application.html.erb của tôi là:

<%= dump(params) %> 

Tôi biết rằng một kịch bản đặc biệt nên sản lượng như sau:

--- !map:ActiveSupport::HashWithIndifferentAccess 
commit: Sign in 
session: !ActiveSupport::HashWithIndifferentAccess 
    password: "" 
    email: "" 
authenticity_token: BlO65PA1oS5vqrv591dt9B22HGSWW0HbBtoHKbBKYDQ= 
action: create 
controller: sessions 

Thay vào đó tôi nhận được như sau:

--- !ruby/hash:ActiveSupport::HashWithIndifferentAccess 
!binary "dXRmOA==": ✓ 
!binary "YXV0aGVudGljaXR5X3Rva2Vu": ItPS/PZ+avYOGD2ckict1urJpatw1HinrVyk385/Yt8= 
!binary "c2Vzc2lvbg==": !ruby/hash:ActiveSupport::HashWithIndifferentAccess 
    !binary "dXNlcm5hbWU=": '' 
    !binary "cGFzc3dvcmQ=": '' 
!binary "Y29tbWl0": Sign in 
action: create 
controller: sessions 

Điều này ít hữu ích hơn nhiều.

Tôi giả định rằng đường ray có tùy chọn xuất dữ liệu như trong bộ nhớ (nghĩa là biểu mẫu nhị phân) hoặc có thể giải mã dữ liệu và hiển thị dữ liệu ở dạng văn bản thuần túy.

Tôi rõ ràng đang nhận được dữ liệu chính xác, chỉ ở dạng sai.

Câu hỏi đặt ra là làm cách nào để nhận phiên bản thuần văn bản?

Câu hỏi thứ hai là tại sao một trang web như stackoverflow không có cơ chế để bao gồm các ký tự đặc biệt trong tìm kiếm? Cơ bản thất bại IMO

+0

Ngoài ra, gọi debug() onobjects ngoài params dường như hoạt động ok. –

+0

mu: nó đã được yêu cầu ở đó nhiều lần - tôi chỉ cảm thấy thích thú khi nó xuất hiện không ai thực sự quan tâm đến giải pháp –

+0

Dường như nó chỉ là các khóa được mã hóa nếu điều đó giúp. –

Trả lời

1

Tôi tin rằng đó là mã hóa chuỗi cho khóa được biểu diễn kỳ lạ là !binary mặc dù không có ký tự ASCII 7 bit nào trong đó. Các giá trị được mã hóa dưới dạng base-64 để hiển thị chúng ở dạng văn bản thuần túy:

"dXRmOA==".unpack('m') 
# => ["utf8"] 

Đây có thể là hiện vật của môi trường mã hóa chuỗi mặc định không đều.

+0

Tệp application.rb của tôi có: config.encoding = "utf-8" Không được có ký tự không phải utf-8 ở bất kỳ đâu trong hệ thống. ngay cả khi những gì bạn nói là thử, điều này không giúp tôi có được dữ liệu thực tế dưới dạng văn bản thuần túy. –

4

Bạn có thể thử thay đổi từ .dump thành .inspect như thế này không?

<%= params.inspect %> 
+0

Thats tốt hơn nhiều, tôi vẫn muốn biết tại sao các khóa trong .dump được mã hóa base64. –

+0

Chỉ cần một lưu ý về tiền thưởng - Tôi sẽ đợi thêm vài ngày nữa để ai đó trả lời câu hỏi tại sao .dump đang được mã hóa và cách khắc phục nó, nhưng nếu không có câu trả lời nào, tôi sẽ trao giải cho câu trả lời này ít nhất là có ích. –

+0

Thực hiện tốt - bạn vừa tự ghi điểm số tiền thưởng đầu tiên của tôi :) –

0

này chắc chắn là quá muộn để giúp bạn, nhưng hy vọng những người khác được đến câu hỏi này trong khi làm việc thông qua Michael Hartl của Rails Hướng dẫn có thể tìm thấy nó hữu ích.

Hướng dẫn Rails Phiên bản thứ hai sử dụng đá quý sqlite3 1.3.5.

câu trả lời này giải thích sự khác biệt về cách thức các công cụ phân tích ra ... YAML output from rails console

Nó làm việc cho tôi - tôi nâng cấp ngọc sqlite3 để 1.3.6 trong Gemfile của tôi, chạy bundle install và giết chết/khởi động lại đường ray máy chủ. Sau đó, các nhị phân được thay đổi trở lại các phím dựa trên văn bản mà bạn mong đợi.

Các vấn đề liên quan