我在Ruby中有一个哈希:
params={"username"=>"test"}
我想添加另一个关联数组,如:
params["user"]={"name"=>"test2"}
所以params
应该成为
params={"username"=>"test","user"=>{"name"=>"test2"}}
但是当我将这个参数发布到网址时,我得到:
params[:user][:name] # => nil
当我转储用户数据时:
params[:user] # => ['name','test2']
我想要的是
params[:user] # => output {'name'=>'test2'}
我做错了什么?感谢帮助。
答案 0 :(得分:2)
您只是使用了错误的密钥,您认为:user
和"user"
是相同的,而不是。
params["user"]["name"] #=> "test2"
params["user"] #=> {"name"=>"test2"}
来自Naveed的更新:
:user是Symbol类的实例,而“user”是String
的实例答案 1 :(得分:2)
您已使用string类型的键创建了一个哈希,并尝试使用符号键进行访问。这仅适用于课程HashWithIndifferentAccess。
如果您希望使用hash
方法将HashWithIndifferentAccess
转换为with_indifferent_access
,
> params = {"username"=>"test", "user"=>{"name"=>"test2"}}
=> {"username"=>"test", "user"=>{"name"=>"test2"}}
> params[:user][:name]
=> nil
>params = params.with_indifferent_access
> params[:user][:name]
=> "test2"
更新:request params
是HashWithIndifferentAccess
答案 2 :(得分:1)
以下内容应该有效:
params["user"]
答案 3 :(得分:1)
params={"username"=>"test"}# params is not array nor associative array its a hash
您可以通过
添加哈希中的键值对params["key"]="value"
键和值都可以是任何类的对象,请确保使用相同的对象作为键来访问值或查看 HashWithIndifferentAccess
现在
params["user"]={"name"=>"blah"}
params["user"] # => {"name"=>"blah"}
params["user"]["name"] # => "blah"