访问Ruby的哈希变量(Access Ruby hash variables)

2019-09-01 01:23发布

我非常新的Ruby和西纳特拉但基本上我有这样的路线:

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]

它只是返回零..

我只需要知道我能做些什么来访问这些变量,或者如何配置我的请求参数是在访问变量的一个很好的格式。

Answer 1:

尽量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"


Answer 2:

标准的哈希把字符串和符号不同,而且我愿意打赌这是什么发生在这种情况下。

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

有工作时,唯一的例外是HashWithIndifferentAccess是的ActiveSupport的一部分。 用于该类型的散列,字符串或符号可以被用来访问相同的元件。



Answer 3:

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

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


文章来源: Access Ruby hash variables