Драгоценный камень Фарадея неопределенный метод 'bytesize' = 'для Hash` - PullRequest
0 голосов
/ 25 мая 2018

Я хочу отправить запрос POST в API.Вот мой код:

conn = Faraday.new(url: BASE) do |faraday|
  faraday.response :logger
  faraday.request  :url_encoded
  faraday.headers['Content-Type'] = 'application/json'
  faraday.headers["Authorization"] = "bearer #{AppConfig.instance.access_token}"
  faraday.adapter Faraday.default_adapter
end
form_data = {a: 1, b: 2}
conn.post("/api/test", form_data)

Но я получаю эту ошибку:

NoMethodError (undefined method `bytesize' for {:a=>1, :b=>2}:Hash)

Я также пытался:

conn.post("/api/test", form_data.to_json)

, но она тоже не работает.

1 Ответ

0 голосов
/ 25 мая 2018

Официальный Фарадей Репо предоставляет следующее описание:

# post payload as JSON instead of "www-form-urlencoded" encoding:
conn.post do |req|
  req.url '/nigiri'
  req.headers['Content-Type'] = 'application/json'
  req.body = '{ "name": "Unagi" }'
end

Итак, тип контента 'application / json' не может разрешить хэш.Gem не конвертирует данные тела в нужный формат самостоятельно.

Вам необходимо преобразовать ваши данные form_data в формат строки (json):

form_data = {a: 1, b: 2}.to_json

Примечание.Не конвертируйте .to_s при использовании формата символьных ключей, поскольку это приведет к ошибке синтаксического анализа.

С предоставленной вами конфигурацией Фарадея я не могу вызвать никаких ошибок после преобразования format_data в json.Итак, новая ошибка не связана с гемом Фарадея или предоставленным кодом.

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