私はRubyとsinatraにかなり慣れていますが、基本的には次のルートを持っています:
put '/user_list/:user_id' do
puts request.params["model"]
end
そしてそれは次を返します
{"password":"36494092d7d5682666ac04f62d624141","username":"nicholas","user_id":106,"firstname":"Nicholas","email":"[email protected]","is_admin":0,"lastname":"Rose","privileges":""}
現在、それらのそれぞれの値にアクセスするのに苦労しています。それは本当にハッシュ形式ではないようですので、実際にはできません
request.params["model"][:password]
単にnilを返します。
これらの変数にアクセスするために何ができるか、または変数にアクセスするためにリクエストパラメータを適切な形式に設定する方法を知る必要があります。
request.params["model"]["password"]
をお試しください
Hash
のキーは、記号と文字列の両方で構成できます。ただし、文字列キーは記号キーとは異なります。
次の点に注意してください。
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"
標準のハッシュでは、文字列とシンボルの扱いが異なります。この場合は、それが実現することを望んでいます。
使用する request.params["model"]["password"]
パスワードを取得します。
その例外は、ActiveSupportの一部である HashWithIndifferentAccess
を使用する場合です。そのタイプのハッシュの場合、文字列またはシンボルを使用して同じ要素にアクセスできます。
以下を試してください、それも動作します:
request.params["model"][:password.to_s]