Доступ к хэшу в посте REST - PullRequest
1 голос
/ 08 февраля 2012

У меня есть хеш в Ruby:

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

Я хочу добавить еще один ассоциативный массив, например:

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

поэтому params должно стать

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

но когда я публикую эти параметры в URL, я получаю:

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

когда я сбрасываю данные пользователя:

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

что я хочу это

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

что я делаю не так? Спасибо за помощь.

Ответы [ 4 ]

2 голосов
/ 08 февраля 2012

Вы просто используете неправильный ключ, вы думаете, что :user и "user" - это одно и то же, а это не так.

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

ОБНОВЛЕНИЕ от Naveed:

: пользователь является экземпляром класса Symbol, а «пользователь» является экземпляром строки

2 голосов
/ 08 февраля 2012

Вы создали хеш с ключами типа 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

1 голос
/ 08 февраля 2012
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"
1 голос
/ 08 февраля 2012

Должно работать следующее:

params["user"]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...