Rails 5: API нет неявного преобразования строки в целое число - PullRequest
0 голосов
/ 31 марта 2019

Я пытаюсь передать данные из API ответов Typeform.Все работает, кроме пользовательских ответов.Только один ответ работает с type: website, например, другой type: multiple_choice не работает.

Пример ответа от Typeform выглядит следующим образом:

"items": [
{
 "landing_id": XXXXXXX
},
"answers": [
        {
          "field": {
            "id": "hVONkQcnSNRj",
            "type": "website",
            "ref": "my_custom_website_reference"
          },
          "type": "url",
          "text": "https://xxxxx.com"
        },
        {
          "field": {
            "id": "k6TP9oLGgHjl",
            "type": "multiple_choice",
            "ref": "my_custom_multiple_choice2_reference"
          },
          "type": "choice",
          "choice": {
            "label": "Tokyo"
          }
        }
      ]

My OrdersController.rb

response = HTTParty.get("https://api.typeform.com/forms/XXXXXX/responses?page_size=25&query=#{current_user.hash_id}",
  headers: {"Authorization" => "Bearer #{@token}"})
if response.code.to_i == 200
  items = response.parsed_response["items"]
  items.each do |item|
    @order = current_user.orders.find_or_create_by(landing_id: item["landing_id"]) do |order|
      item["answers"].each do |answer|
      order.landing_id = item["landing_id"]
      order.email = item["hidden"]["email"]
      order.price = item["hidden"]["price"]
      order.moduls = item["hidden"]["moduls"]
      order.project = item["hidden"]["project"]
# This is working
      order.website = answer["url"]
# This isn't working
      order.payment = answer["choice"]
    end
  end
end

Когда я изменяю answer["choice"] на answer, я получаю только первый field из ànswers, который равен https://xxxxx.com.Если я изменю answer["choice"] на item["answers], я получу каждый field от answers.

Если я использую item["answers]["field"]["choice"] или что-то подобное, я получаю эту ошибку no implicit conversion of string into integer.

В документации Typeform я нашел следующее:

ПОЛЕ С ОТВЕТОМЗНАЧЕНИЕ (ОТНОСИТСЯ К ОБЪЕКТУ ОТВЕТА ПУНКТА)

answers[n].choice.label

Возможно, мне нужно настроить свой код?Для меня действительно неясно, что это значит.

1 Ответ

0 голосов
/ 31 марта 2019

Я не уверен, как работает answer['url'], поскольку в ответах нет клавиши "url".

Звучит так, будто вы хотите что-то вроде ...

@order = current_user.orders.find_or_create_by(landing_id: item["landing_id"]) do |order|
  order.landing_id = item["landing_id"]
  order.email = item["hidden"]["email"]
  order.price = item["hidden"]["price"]
  order.moduls = item["hidden"]["moduls"]
  order.project = item["hidden"]["project"]

  website_field = item['answers'].select{|k,v| v['field']['type'] == 'website'}.first
  # you have an array of fields, select the first with type "website"
  order.website = website_field['text'] # now get the "text" value which is the url

  choice_field = item['answers'].select{|k,v| v['field']['type'] == 'multiple_choice'}.first
  # same but with the field with type "multiple_choice"
  order.payment = choice_field['choice']['label']
end
...