Rails 5: Как мне перебрать хеш с каждым делом - PullRequest
0 голосов
/ 03 апреля 2019

Я хочу получить конкретный вывод из API Typeform.

Это ответ, который я получаю.

Пример ответа:

"answers": [
        {
          "field": {
            "id": "hVONkQcnSNRj",
            "type": "dropdown",
            "ref": "my_custom_dropdown_reference"
          },
          "type": "text",
          "text": "Job opportunities"
        },
        {
          "field": {
            "id": "RUqkXSeXBXSd",
            "type": "yes_no",
            "ref": "my_custom_yes_no_reference"
          },
          "type": "boolean",
          "boolean": false
        }
       ]

Почему .first работает и почему .second не работает?

Мой OrdersController.rb

  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"]
      order.website = answer.first # This works
      order.payment = answer.second # undefined method `second' for #<Hash:0x11f83e78>
    end
  end
end

Ответы [ 3 ]

1 голос
/ 03 апреля 2019

Вы можете сделать

answers.each { |answer| answer[:field] }

или, если вы хотите, например, идентификаторы

answers.map { |answer| answer[:field][:id] }

0 голосов
/ 03 апреля 2019

item["answers"].each do |answer| было излишним.Решение было таким простым:

order.website = item["answers"][1]["text] # Access the first field of answers array

order.payment = item["answers"][2]["text] # Access the second field of answers array

0 голосов
/ 03 апреля 2019

Потому что у хэша ruby ​​нет ни второго, ни последнего метода.Вы можете получить доступ к значению с помощью клавиш.например, ответ [: тип], ответ [: текст]

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