我将JSON数据发送到解析它的控制器。
ROR代码
Class.where(challenge_id:challenge.id,song_id:song_hash['song_id']).first
错误是
can't convert String into Integer
我甚至将song_id:song_hash['song_id']
更改为song_id:song_hash['song_id'].to_i
,但它无效
哈希数据是
{"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"}}}}
无法找到未转换为整数的内容
答案 0 :(得分:6)
我猜你的song_hash
根本不是哈希,它是一个数组。可能来自传入数据的这个数组:
"guessed_songs":[{"song_id":1,"guessed":"YES"},{"song_id":2,"guessed":"YES"},{"song_id":3,"guessed":"YES"},{"song_id":4,"guessed":"YES"},{"song_id":5,"guessed":"YES"}],
您看到的错误几乎总是尝试索引数组,就像它是哈希一样。例如:
>> song_hash = [ ]
>> song_hash['song_id']
TypeError: can't convert String into Integer
代码中唯一的索引是:
song_hash['song_id']
这肯定是用字符串索引的东西,所以它匹配你看到的TypeError。将其更改为:
song_hash['song_id'].to_i
无效,因为在[]
有机会做任何事情之前会调用有问题的to_i
方法。
答案 1 :(得分:0)
您的任何字段(challenge_id
,song_id
)可能都是整数,但您可以将其插入字符串
还有你在json中有很多不明白的东西无法理解challenge_id":cId
是一个整数
根据您的
所有歌曲ID
irb(main):016:0* song_hash = {"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"}}}
=> {"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"}}}
irb(main):018:0> song_hash["guessed_songs"].each do |key,song|
irb(main):019:1* puts song["song_id"].to_i
irb(main):020:1> end
=>10
=>11
=>12
=>13
=>15
=> {"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"}}
所以在循环中你可以尝试这个
pm=PlaylistMembership.where(challenge_id:challenge.id,song_id:song["song_id"].to_i).first
答案 2 :(得分:0)
试试这个:
song_id:song_hash[:song_id]