21

私はルビーとシナトラにかなり慣れていませんが、基本的に私はこのルートを持っています:

put '/user_list/:user_id' do
    puts request.params["model"]
end

そして、それは以下を返します

{"password":"36494092d7d5682666ac04f62d624141","username":"nicholas","user_id":106,"firstname":"Nicholas","email":"nicholas@macpractice.com","is_admin":0,"lastname":"Rose","privileges":""}

私は今、それらのそれぞれの値にアクセスするのに苦労しています。ハッシュ形式ではないように見えるので、実際にはできません

request.params["model"][:password]

nilを返すだけです..

これらの変数にアクセスするために何ができるか、または変数にアクセスするのに適した形式になるように要求パラメーターを構成する方法を知る必要があるだけです。

4

3 に答える 3

52

試すrequest.params["model"]["password"]

AHashのキーは、記号と文字列の両方で構成できます。ただし、文字列キーは記号キーとは異なります。

次の点に注意してください。

h = {:name => 'Charles', "name" => 'Something else'}
h[:name] #=> 'Charles'
h["name"] #=> 'Something else'

編集:

特定の状況でrequest.params["model"]は、ハッシュではなく文字列を返すようです。String#[]部分文字列を取得する手段であるメソッドがあります。

s = "Winter is coming"
s["Winter"] #=> "Winter"
s["Summer"] #=> nil

これはあなたのコメントを説明します。

特定の状況を改善するためにできることがいくつかあります。を使用する最も簡単な方法を見つけましたJSON。(他にもあると思いますが、他の回答やコメントを通じてそれらが表面化する可能性があります。)

require 'json'
hash_of_params = JSON.load(request.params["model"]).to_hash
hash_of_params["password"] #=> "36494092d7d5682666ac04f62d624141"
于 2013-04-24T14:12:12.380 に答える