在REST POST中访问哈希

时间:2012-02-08 11:09:21

标签: ruby-on-rails ruby rest

我在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'}
我做错了什么?感谢帮助。

4 个答案:

答案 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 paramsHashWithIndifferentAccess

的一个实例

答案 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"