Ruby on Rails ne pouvez pas convertir une Chaîne en un Entier
Je suis l'envoi de données JSON à un contrôleur qui l'analyse.
ROR Code
Class.where(challenge_id:challenge.id,song_id:song_hash['song_id']).first
La erreur est
can't convert String into Integer
J'ai même changer le song_id:song_hash['song_id']
à song_id:song_hash['song_id'].to_i
mais il ne fonctionne pas
La DONNÉES de Hachage est
{"session_token"=>"Xt9toEzHI3bYXeJNkenyqg", "challenge"=>{"challenge_id"=>"15", "player_name"=>"usman", "guessed_songs"=>{"0"=>{"song_id"=>"10", "guessed"=>"YES"}, "1"=>{"song_id"=>"11", "guessed"=>"YES"}, "2"=>{"song_id"=>"12", "guessed"=>"YES"}, "3"=>{"song_id"=>"13", "guessed"=>"YES"}, "4"=>{"song_id"=>"15", "guessed"=>"YES"}}, "player_status"=>{"0"=>{"coins"=>"20", "points"=>"0", "player_name"=>"usman"}, "1"=>{"coins"=>"20", "points"=>"0", "player_name"=>"Usman"}}}}
Ne trouvez pas ce que n'est pas la conversion en entier
- Les DONNÉES JSON que vous avez fourni n'est pas
json
à tous.{"song_id":q1,"guessed":"YES"}
n'est pasjson
. {"song_id":"t1","deviné":"OUI"} estjson
. Remarquez les guillemets - En dehors de cela, l'indice est "song_id" : q1. q1 est RIEN. Pas une chaîne, ni un entier. Mais les rails attend song_id entier, mais son impuissance
- en fait, Q1 et Q2 sont les variables. les données sont en nombre entier supposons que 1,2,3,4,5.. j'ai édité le Q
- qu'est-ce que ce
challenge.id
? est-il arriver entier - Pouvez-vous inspecter avec levier ou un débogueur juste à la ligne avant et après les valeurs de défi.id et song_hash['song_id']?
Vous devez vous connecter pour publier un commentaire.
Je suppose que votre
song_hash
n'est pas vraiment un Hachage à tous, c'est un Tableau. Probablement ce tableau à partir des données entrantes:L'erreur que vous voyez est presque toujours une raison d'essayer de l'index d'un Tableau comme si c'était une table de Hachage. Par exemple:
La seule indexation dans votre code est:
et c'est certainement quelque chose qui est indexée avec une corde afin qu'il corresponde à la TypeError que vous vous voyez. Changer de:
ne va pas aider parce que la délinquance
[]
méthode sera appelée avantto_i
obtient une chance de faire quelque chose.Essayez ceci:
song_id:song_hash[:song_id]
Probablement l'un de vos champs(
challenge_id
,song_id
) est entier mais vous insérer une chaîne de caractèresen vous json, il y a beaucoup de ambiguë chose ne peut pas comprendre
challenge_id":cId
est-il un entierSelon votre
pour que toutes les chansons id
donc en boucle, vous pouvez essayer ce
challenge
? vous n'avezchallenge.id
song_hash