法拉第宝石未定义的方法' bytesize' ='为哈希

时间:2018-05-25 07:43:38

标签: ruby-on-rails ruby ruby-on-rails-4 faraday

我想向API发送POST请求。这是我的代码:

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 :(得分:0)

官方faraday回购提供下一个说明:

# 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后无法导致任何错误。因此,新的错误与法拉第宝石或提供的代码无关。