Обновите массив [JSON] для запроса POST в api / v1 приложения ruby - PullRequest
0 голосов
/ 17 марта 2020

Я использую Ruby и пытаюсь создать API для обновления всех игроков с помощью одного запроса POST. Я должен обновить всех игроков, у которых есть «идентификаторы» по запросу. Запрос на публикацию дается в виде массива [JSON], поэтому мне нужно сравнить все идентификаторы для каждого JSON с игроками в базе данных, и мне нужно обновить тех, у кого указан идентификатор. Вот код почтового запроса:

{ 
"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

Но это не работает! Я ничего не нашел об этом. Кто-то может мне помочь? Заранее большое спасибо!

1 Ответ

1 голос
/ 17 марта 2020

p = Player.find_by(id: params[:id]) -> Из того, что вы опубликовали, нет параметра id, и если бы он был, он бы ссылался на один и тот же параметр каждый раз через ваш l oop. Я думаю, что вы хотите p = Player.find_by(id: player['player_id'])

Также имейте в виду, что Player.find_by(id: some_value) смотрит на идентификатор базы данных, который, я думаю, может отличаться от player_id. Если это так, тогда player_id, вероятно, должен быть другим столбцом в вашей таблице игроков, и вместо этого вы должны сделать .find_by(player_id: player['player_id'])

Кроме того, если вы просто обновляете запись на месте, вы должны использовать update!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...