Нет неявного преобразования API HTTParty::Response в String (TypeError) с Ruby

Это работало без проблем, теперь я получаю следующую ошибку, когда использую тот же идентификатор, который я зарегистрировал в запросе:

нет неявного преобразования HTTParty::Response в String (TypeError)

Код:

include HTTParty
base_uri 'http://dummy.restapiexample.com/api/v1'

def create 
    nome = Faker::UniqueGenerator.clear
    nome = Faker::Name.unique.first_name
    salario = Faker::Number.number(digits: 2)
    idade   = Faker::Number.number(digits: 2)
    $body = {name: nome, salary: salario, age: idade }.to_json
  
  $headers = {
    'Accept' => 'application/vnd.tasksmanager.v2',
    'Content-Type' => 'application/json'
  }

  self.class.post('/create', body: $body, headers: $headers) 
end

def retrieve(id)
  self.class.get("/employee/#{ id }")
 
 
 When("the request to change the employee is sent") do
  $response = @manter_user.create
  expect(@manter_user.create.code).to eq (200)
  puts $response.body
  {"status":"success","data":{"name":"Patrice","salary":59,"age":39,"id":364},"message":"Successfully! Record has been added."}

  
  @id = JSON.parse($response)['id'] #### error
  puts @manter_user.retrieve(@id)
  no implicit conversion of HTTParty::Response into String (TypeError)
  expect(@manter_user.retrieve(@id).code).to eq (200) 

end

Совет: держитесь подальше от глобальных переменных, таких как $response. Это не PHP. Переменные Ruby — это просто response = ...

tadman 06.01.2023 05:35

Какая линия не работает?

tadman 06.01.2023 05:37

Вероятно, вы хотели сделать JSON.parse($response.body), а не JSON.parse($response).

javiyu 06.01.2023 07:48

Это работало раньше, мой код, который я создаю, и запрашиваю тот же идентификатор. ожидать(@manter_user.retrieve(@id).code).to eq (200)

Cassia Klaison 06.01.2023 13:12
Пошаговое руководство по созданию собственного Slackbot: От установки до развертывания
Пошаговое руководство по созданию собственного Slackbot: От установки до развертывания
Шаг 1: Создание приложения Slack Чтобы создать Slackbot, вам необходимо создать приложение Slack. Войдите в свою учетную запись Slack и перейдите на...
0
4
101
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Поскольку вы предоставили много дополнительной информации в своем другом посте , я создал рабочий пример для вашего ознакомления: https://replit.com/@engineersmnky/APIEXAMPLE#main.rb

Просто чтобы обернуть это:

Ваша ошибка вызвана этой строкой

@id = JSON.parse($response)

Переменная $response является экземпляром HTTParty::Response, однако JSON.parse ожидает String.

Чтобы решить эту проблему, вы можете использовать $response.body, который вернет JSON в формате String для синтаксического анализа. Кроме того, HTTParty будет автоматически анализировать многие известные форматы, поэтому вы можете пропустить этот шаг и просто использовать $response.parsed_response, который вернет то же самое.

Ваша вторая проблема заключается в том, что вы пытаетесь получить доступ к «id» в неправильном месте. Ваш ответ имеет следующий формат:

resp = {"status":"success",
        "data":{
          "name":"Patrice",
          "salary":59,
          "age":39,
          "id":364},
        "message":"Successfully! Record has been added."}

Здесь вы можете видеть, что «id» вложен в «данные», но вы пытаетесь получить к нему доступ на верхнем уровне:

resp["id"] 
#=> nil 
resp["data"]["id"] 
#=> 364

IMPORTANT NOTE: I certainly understand how frustrating being a new programmer can be and how that can impact your attitude and approach, but please try to remember you came to SO for help (and lots of commenters tried to help). If you had taken a minute to listen to the comments, with a clear, calm mind, you would see that they were correct about why your error was occurring and if you had tried to implement their changes you would see everything works exactly as expected. I hope this helps you now and in the future. Best of luck!

Браво; респект вам.

Dave Newton 11.01.2023 19:12

Очень благодарен, признаюсь, что я был сбит с толку, потому что он работал отлично. Возможно, в Ruby должны были быть какие-то изменения в отношении драгоценных камней. Я работаю с CodeCeptJS над автоматизацией и хотел оживить этот код. Большое спасибо за ваши слова.

Cassia Klaison 11.01.2023 21:54

Еще одна вещь: я хотел перечислить всю запись после обновления, а также показать тот же идентификатор, который я показываю при создании, чтобы доказать, что это тот же обновленный идентификатор. СОЗДАТЬ: Данные созданного сотрудника: {"status":"success","data":{"name":"Nell","salary":4462.23,"‌​age":14,"id":5392} ,"‌​message":"Успешно‌​ly! Запись добавлена."} Обновить Данные созданного сотрудника: {"status":"success","data":{"name":"Grace","salary ":"4500,28‌​","возраст":"36"},"messa‌​ge":"Успешно! Запись обновлена."}

Cassia Klaison 11.01.2023 22:07

мой код: @manter_user = Crud.new. parsed_response["data"]["id"] помещает "id: #{id} обновлен так же, как ранее созданный...." puts retrieve_response = manter_user.update(id) помещает "Update Response HTTP code 200: #{ получить_ответ.код == 200}"

Cassia Klaison 11.01.2023 22:14

@CassiaKlaison, к сожалению, этот API не полностью поддерживает собственную реализацию. Вы можете «создать», и он ответит, вы можете получить идентификаторы до 24, вы можете обновить, но ответ будет искажен, и вы можете «удалить», используя любое число. С этим ничего не поделаешь, он просто сломан. Я обновил свой пример, чтобы показать вам лучше.

engineersmnky 11.01.2023 22:31

Еще раз спасибо!!!! у тебя доброе сердце!!

Cassia Klaison 12.01.2023 13:47

@engineersmnky мой лучший друг я запостил новую задачу, что если я ее решу, то все закончу. Я хочу использовать один и тот же идентификатор для перечисления, изменения и удаления, я получаю код ошибки 200. Код HTTP 200: #{$response.code == 200}" #List $id = $response.parsed_response["data"]["id"] помещает "@id: #{$id} возвращается тот же самый ранее созданный ..." retrieve_response = $manter_user.retrieve($id) помещает "Получить HTTP-код ответа 200: #{retrieve_response.code == 200}" end

Cassia Klaison 13.01.2023 20:09

Другие вопросы по теме