在ruby应用程序的api/v1中为POST请求更新Array[JSON]



我正在学习Ruby,我正在尝试创建一个API来用一个POST请求更新所有玩家。我必须更新所有在请求中拥有"id"的玩家。post请求是以Array[JSON]的形式给出的,所以我必须将每个JSON的所有id与数据库中的播放器进行比较,并且我必须更新那些指定了id的播放器。这里的邮政编码请求:

{ 
"players": [
{
"player_id": 1,
"shirt_number": "25",
"speed": "47",
"agility": "80",
"shot": "62",
"step": "24",
"technique": "70",
"contrasts": "59",
"resistance": "65",
"parades": "25",
"aggressiveness": "60",
"coldness": "50"
},
{
"player_id": 2,
"shirt_number": "11",
"speed": “52",
"agility": “78",
"shot": “65",
"step": “23",
"technique": “60",
"contrasts": “19",
"resistance": “44",
"parades": "25",
"aggressiveness": "60",
"coldness": "50"
}
]
}

这里有代码和参数:

desc 'Update a team'
params do
requires :players, type: Array[JSON] do
requires :id, type: Integer, desc: "Player ID"
requires :shirt_number, type: String, desc: "Shirt Number"
requires :speed, type: String, desc: "Speed"
requires :agility, type: String, desc: "Agility"
requires :shot, type: String, desc: "Shot"
requires :step, type: String, desc: "Step"
requires :technique, type: String, desc: "Technique"
requires :constrasts, type: String, desc: "Constrasts"
requires :resistance, type: String, desc: "Resistance"
requires :parades, type: String, desc: "Parades"
requires :aggressiveness, type: String, desc: "Aggressiveness"
requires :coldness, type: String, desc: "Coldness"
end
end
post 'update_team' do
params[:players].each do |player|
p = Player.find_by(id: params[:id])
p.update(player)
end
end

但它不起作用!我什么也没发现。有人能帮我吗?提前非常感谢!

p = Player.find_by(id: params[:id])->根据您发布的内容,没有id参数,如果有,则在循环中每次都会引用相同的参数。我想你想要的是p = Player.find_by(id: player['player_id'])

还要记住,Player.find_by(id: some_value)正在查看数据库ID,我认为它可能与player_id不同。如果是这种情况,那么player_id可能应该是玩家表中的另一列,而您应该执行.find_by(player_id: player['player_id'])

此外,如果您只是在适当的位置更新记录,则应该使用update!

最新更新