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

Ruby on rails Rails调试方法只输出!二进制值,ruby-on-rails,ruby,debugging,Ruby On Rails,Ruby,Debugging,我已经尽我所能在互联网上搜索这个问题,但我完全被这个关键词所迷惑!二进制搜索引擎(包括stackoverflow的内部搜索!)去掉感叹号 我正在通过Rails tuorial at-whcih工作,这在很大程度上是一个极好的资源。application.html.erb页面底部的一个有用内容是: <%= dump(params) %> 相反,我得到了以下结果: --- !map:ActiveSupport::HashWithIndifferentAccess commit: Sig

我已经尽我所能在互联网上搜索这个问题,但我完全被这个关键词所迷惑!二进制搜索引擎(包括stackoverflow的内部搜索!)去掉感叹号

我正在通过Rails tuorial at-whcih工作,这在很大程度上是一个极好的资源。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这样的网站没有在搜索中包含特殊字符的机制?我相信这就是密钥的字符串编码,它被奇怪地表示为
!二进制
即使其中没有非7位ASCII字符。这些值被编码为base-64,以纯文本形式呈现:

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

这可能是默认字符串编码不规则的环境的产物。

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

<%= params.inspect %>

这对您来说肯定太晚了,但希望其他在阅读Michael Hartl的Rails教程时遇到这个问题的人会发现它很有帮助

Rails教程第2版使用sqlite3 1.3.5 gem

这个答案解释了不同的东西是如何解析出来的


它对我起了作用——我在Gemfile中将sqlite3gem升级到1.3.6,运行
bundle安装
并关闭/重新启动rails服务器。在那之后,我们就开始了!二进制将更改回您期望的基于文本的密钥。

My application.rb文件包含:config.encoding=“utf-8”系统中不应包含任何非utf-8字符。即使您说的是try,这也不能帮助我以明文形式获取实际数据除了参数之外的其他对象似乎可以正常工作。穆:已经有人问过好几次了-我只是觉得抱怨,因为似乎没有人对解决方案感兴趣。如果有帮助的话,似乎只是编码的键。如果你不检查UTF-8
超出
params
?如何从params中删除UTF-8检查?抱歉,我有点像rails N00B。这要好得多,我仍然想知道为什么.dump中的键是base64编码的。只是一个关于赏金的说明-我会再等几天,让别人回答为什么.dump被编码以及如何修复它的问题,但是如果没有答案,我会把它奖励给这个答案,这个答案至少有点帮助。谢谢克里斯!为了便于了解,Rails有时将散列键存储为base64,因为这是在数据库的文本字段中存储散列键blob的最方便的方法。例如,Rails默认会话存储执行自动base64编码。我不知道你的情妇是否就是这样,但也许这是你的线索。