21

我对 ruby​​ 和 sinatra 很陌生,但基本上我有这条路线:

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]

它只是返回零..

我只需要知道我可以做些什么来访问这些变量,或者如何将我的请求参数配置为访问变量的良好格式。

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 回答
5

标准哈希对字符串和符号的处理方式不同,我敢打赌这就是这种情况下发生的事情。

用于request.params["model"]["password"]获取密码。

例外情况是使用HashWithIndifferentAccessActiveSupport 的一部分时。对于该类型的哈希,可以使用字符串或符号来访问相同的元素。

于 2013-04-24T14:15:41.277 回答
0

试试下面的,它也可以工作:

request.params["model"][:password.to_s]
于 2013-04-24T14:28:59.173 回答