Rails调试方法只输出!二进制值

时间:2012-03-09 00:15:02

标签: ruby-on-rails ruby debugging

我尽可能地搜索互联网这个问题,但我完全被关键字!二进制作为搜索引擎(包括stackoverflow的内部搜索!)去除感叹号。

我正在http://ruby.railstutorial.org处理Rails课程 - 这在很大程度上是一个很好的资源。我在application.html.erb页面底部的一个有用的东西是:

<%= dump(params) %>

我被告知特定情况应输出以下内容:

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

相反,我得到以下内容:

--- !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

这远没那么有用。

我假设rails可以选择输出数据,因为它在内存中(即二进制形式),或者它可以解码数据并以纯文本显示。

我显然是以错误的形式获取正确的数据。

问题是如何获得纯文本版本?

第二个问题是为什么像stackoverflow这样的网站没有在搜索中包含特殊字符的机制?基本失败IMO

3 个答案:

答案 0 :(得分:4)

您可以尝试从.dump更改为.inspect吗?

<%= params.inspect %>

答案 1 :(得分:1)

我相信这是密钥的字符串编码,奇怪地表示为!binary,即使其中没​​有非7位ASCII字符。这些值被编码为base-64,以纯文本形式呈现它们:

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

这可能是您的环境中的工件,其中默认字符串编码是不规则的。

答案 2 :(得分:0)

这对你来说肯定来得太晚了,但希望在完成Michael Hartl的Rails教程时遇到这个问题的其他人可能会觉得它很有帮助。

Rails Tutorials第2版使用sqlite3 1.3.5 gem。

这个答案解释了这些东西解析出来的差异...... YAML output from rails console

它对我有用 - 我在我的Gemfile中将sqlite3 gem升级到1.3.6,运行bundle install并杀死/重启了rails服务器。之后,!二进制文件将更改回您期望的基于文本的键。