我正在尝试手动创建一些参数以传递给Rails控制器函数,为什么在params哈希中列出的键是用冒号表示的,例如
params[:key]
而不是params["key"]
?params[:key]
而不是params["key"]
?Rails 使用 ActiveSupport 的 HashWithIndifferentAccess
来处理内部几乎所有的哈希表,比如params
。一个 HashWithIndifferentAccess
与普通哈希表一样,但是通过符号或字符串访问相同“值”的键时返回相同的哈希表值。例如:
h = HashWithIndifferentAccess.new
h[:foo] = 'bar'
h[:foo] #=> "bar"
h['foo'] #=> "bar"
h['foo'] = 'BAR'
h[:foo] #=> "BAR"
与普通哈希相比:
h = {}
h[:foo] = 'bar'
h[:foo] #=> "bar"
h['foo'] #=> nil
h['foo'] = 'BAR'
h[:foo] #=> "bar"
这使您不必担心特定键是Symbol还是String(无论好坏)。
哈希使用符号作为键,因为每个符号始终只有一个实例,这样更容易搜索。当使用字符串时,必须计算哈希值,因为它可能不是相同的字符串(另一个实例,但具有相同的内容)。所以这使得它更快。Active Support HashWithIndifferentAccess
将使用 #to_sym
方法将所有字符串转换为符号。