加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

ruby-on-rails – 不需要的符号来进行哈希键的字符串转换

发布时间:2020-12-16 19:38:22 所属栏目:百科 来源:网络整理
导读:当我在我的控制器中分配 @my_hash = { :my_key = :my_value } 并通过做测试控制器 get 'index'assigns(:my_hash).should == { :my_key = :my_value } 那么我收到以下错误消息: expected: {:my_key=:my_value},got: {"my_key"=:my_value} (using ==) 为什么
当我在我的控制器中分配
@my_hash = { :my_key => :my_value }

并通过做测试控制器

get 'index'
assigns(:my_hash).should == { :my_key => :my_value }

那么我收到以下错误消息:

expected: {:my_key=>:my_value},got: {"my_key"=>:my_value} (using ==)

为什么这个自动符号到字符串转换发生了?为什么会影响哈希的关键?

解决方法

如果Rails以某种方式得到它,那么它可能最终成为一个HashWithIndifferentAccess,并且在内部使用字符串键.你可能想要验证类是一样的:
assert_equal Hash,assigns(:my_hash).class

参数始终被处理为无关的访问类型的哈希,因此您可以使用字符串或符号进行检索.如果你把这个分配给你的params哈希的get或post调用,或者你可能会被转换.

你可以做的另一件事就是冻结它,看看有没有人尝试修改它,因为它会抛出异常:

@my_hash = { :my_key => :my_value }.freeze

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读