我尽可能地搜索互联网这个问题,但我完全被关键字!二进制作为搜索引擎(包括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
答案 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服务器。之后,!二进制文件将更改回您期望的基于文本的键。