Je suis assez nouveau pour Ruby et sinatra mais en gros j'ai cette route:
put '/user_list/:user_id' do
puts request.params["model"]
end
et il renvoie ce qui suit
{"password":"36494092d7d5682666ac04f62d624141","username":"nicholas","user_id":106,"firstname":"Nicholas","email":"[email protected]","is_admin":0,"lastname":"Rose","privileges":""}
J'ai maintenant du mal à accéder aux valeurs de chacun d'eux. Il ne semble pas vraiment être au format de hachage, donc je ne peux pas vraiment le faire
request.params["model"][:password]
Il ne renvoie que zéro ..
J'ai juste besoin de savoir ce que je peux faire pour accéder à ces variables, ou comment configurer mes paramètres de demande pour être dans un bon format pour accéder aux variables.
Essayez request.params["model"]["password"]
Les clés d'un Hash
peuvent être composées à la fois de symboles et de chaînes. Cependant, une clé de chaîne est différente d'une clé de symbole.
Notez les points suivants:
h = {:name => 'Charles', "name" => 'Something else'}
h[:name] #=> 'Charles'
h["name"] #=> 'Something else'
MODIFIER:
Dans votre situation particulière, il apparaît request.params["model"]
renvoie une chaîne au lieu d'un hachage. Il existe une méthode String#[]
qui est un moyen d'obtenir une sous-chaîne.
s = "Winter is coming"
s["Winter"] #=> "Winter"
s["Summer"] #=> nil
Cela expliquerait vos commentaires.
Vous pouvez prendre quelques mesures pour remédier à votre situation spécifique. J'ai trouvé le moyen le plus simple d'utiliser JSON
. (Je suis sûr qu'il y en a d'autres et peut-être que ceux-ci apparaîtront dans d'autres réponses ou dans des commentaires.)
require 'json'
hash_of_params = JSON.load(request.params["model"]).to_hash
hash_of_params["password"] #=> "36494092d7d5682666ac04f62d624141"
Le hachage standard traite les chaînes et les symboles différemment, et je serais prêt à parier que c'est ce qui se passe dans ce cas.
Utilisation request.params["model"]["password"]
pour obtenir le mot de passe.
L'exception à cela est lorsque vous travaillez avec un HashWithIndifferentAccess
qui fait partie d'ActiveSupport. Pour les hachages de ce type, des chaînes ou des symboles peuvent être utilisés pour accéder aux mêmes éléments.
Essayez ce qui suit, cela fonctionnera aussi:
request.params["model"][:password.to_s]