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

前端之家收集整理的这篇文章主要介绍了ruby-on-rails – 不需要的符号来进行哈希键的字符串转换前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
当我在我的控制器中分配
@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
原文链接:https://www.f2er.com/ruby/271557.html

猜你在找的Ruby相关文章