2012-02-08 20 views
1

我有一個散列紅寶石:訪問一個哈希在REST POST

params={"username"=>"test"} 

我要添加另一個關聯數組,如:

params["user"]={"name"=>"test2"} 

所以params應該成爲

params={"username"=>"test","user"=>{"name"=>"test2"}} 

但是當我發佈這個PARAMS到一個網址,我得到:

params[:user][:name] # => nil 

,當我轉儲用戶數據:

params[:user] # => ['name','test2'] 

我要的是

params[:user] # => output {'name'=>'test2'} 

我究竟做錯了什麼?感謝幫助。

+2

使用常用術語,它是非常重要的每種語言:在Ruby中是哈希。 – tokland 2012-02-08 12:07:25

+0

我假設這是您使用的Web框架,已將Ruby on Rails標記添加到您的問題中。 (Ruby是一種編程語言; Rails是一個使用Ruby的Web框架。)如果這不正確,請使用您正在使用的Web框架更新您的問題。 – Phrogz 2012-02-08 15:06:31

回答

2

你只是用錯了鍵,你認爲:user"user"是相同的,這是沒有的。

params["user"]["name"] #=> "test2" 
params["user"]   #=> {"name"=>"test2"} 

UPDATE從函數naveed:

:用戶是Symbol類的實例,而「用戶」是字符串

實例
+0

兩者有什麼區別,有什麼參考?謝謝。 – bingjie2680 2012-02-08 11:25:39

+0

在ruby中,一個散列可以有任何對象作爲鍵,所以對象「user」與object:user不同。 – 2012-02-08 11:27:35

+3

:用戶是Symbol類的一個實例,而「user」是String的實例。他們是不一樣的。如果你在里亞爾你可以使用'HashWithIndifferentAccess'現在從這個哈希值可以通過字符串和符號訪問。 – Naveed 2012-02-08 11:37:43

1

下面應該工作:

params["user"] 
+0

請參閱我的更新,關於我想要什麼..感謝 – bingjie2680 2012-02-08 11:19:13

+0

已更新。希望這可以幫助。 – 2012-02-08 11:21:57

+0

不起作用,例外:當你沒有想到它時,你有一個零對象! – bingjie2680 2012-02-08 11:27:44

2

您已經創建了一個哈希類型爲String的鑰匙,並試圖使用符號鍵進行訪問。這僅適用於類HashWithIndifferentAccess

如果要達到同樣的使用with_indifferent_access方法轉換您hashHashWithIndifferentAccess

> 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

+0

我添加'params.with_indifferent_access',它輸出相同的時候我assistry params [:用戶],輸出['名稱','測試2']。 – bingjie2680 2012-02-08 11:35:16

+0

這是一個工作代碼...您使用的是哪個版本的ruby? – nkm 2012-02-08 11:42:05

+0

等待,它說未定義的方法'with_indifferent_access'? – bingjie2680 2012-02-08 11:43:22

1
params={"username"=>"test"}# params is not array nor associative array its a hash 

的情況下,你可以添加鍵值對hash by

params["key"]="value" 

鍵和值都可以是任何類型的對象,以確保您使用同一個對象鍵進入價值或看看 HashWithIndifferentAccess

現在

params["user"]={"name"=>"blah"} 
params["user"] # => {"name"=>"blah"} 
params["user"]["name"] # => "blah"