Bla*_*ten 13 ruby hash sinatra
我对ruby和sinatra很新,但基本上我有这条路线:
put '/user_list/:user_id' do
puts request.params["model"]
end
Run Code Online (Sandbox Code Playgroud)
它返回以下内容
{"password":"36494092d7d5682666ac04f62d624141","username":"nicholas","user_id":106,"firstname":"Nicholas","email":"nicholas@macpractice.com","is_admin":0,"lastname":"Rose","privileges":""}
Run Code Online (Sandbox Code Playgroud)
我现在很难访问每个人的价值观.它似乎不是哈希格式,所以我不能真正做到
request.params["model"][:password]
Run Code Online (Sandbox Code Playgroud)
它只返回零..
我只需要知道如何访问这些变量,或者如何配置我的请求参数以获得良好的格式来访问变量.
Cha*_*ell 40
尝试 request.params["model"]["password"]
A Hash
的键可以包含符号和字符串.但是,字符串键与符号键不同.
请注意以下事项:
h = {:name => 'Charles', "name" => 'Something else'}
h[:name] #=> 'Charles'
h["name"] #=> 'Something else'
Run Code Online (Sandbox Code Playgroud)
编辑:
在您的特定情况下,它会request.params["model"]
返回一个字符串而不是一个哈希.有一种方法String#[]
可以获得子串.
s = "Winter is coming"
s["Winter"] #=> "Winter"
s["Summer"] #=> nil
Run Code Online (Sandbox Code Playgroud)
这可以解释你的意见.
您可以采取一些措施来纠正您的具体情况.我找到了最简单的使用方法JSON
.(我确信还有其他人,可能会通过其他答案或评论来表达.)
require 'json'
hash_of_params = JSON.load(request.params["model"]).to_hash
hash_of_params["password"] #=> "36494092d7d5682666ac04f62d624141"
Run Code Online (Sandbox Code Playgroud)
小智 5
标准 Hash 以不同的方式处理字符串和符号,我愿意打赌这就是这种情况下发生的事情。
使用request.params["model"]["password"]
以获取密码。
例外情况是在使用HashWithIndifferentAccess
ActiveSupport 的一部分时。对于该类型的散列,可以使用字符串或符号来访问相同的元素。