Как правильно отображать json-записи в ruby ​​на рельсах - PullRequest
0 голосов
/ 24 апреля 2019

У меня есть данные JSON следующим образом

[{
            "id": 2332860,
            "name": "NAME 1",
            "capping": [{
                "quantity": 1,
                 "rule":[{"frequency": 'bad' }]
            }]
},

{
            "id": 77777,
            "name": "NAME 2",
            "capping": [{
                "quantity": 2,
                 "rule":[{"frequency": 'good' }]

            }]
}]

Вот как я сначала извлекаю данные id и name через ответ API, и все работает нормально, как показано в коде ниже

obj=JSON.parse(response)
print(obj)

obj.each do |val|
  id, name = val['id'], val['name']

  puts "ID:   #{id}"
  puts "Name: #{name}"

end

Вот как выглядит вид

<ul>
  <% obj.each do |val| %>
    <li><%= val['id'] %> - <%= val['name'] %></li>
  <% end %>
</ul>

Чего я сейчас пытаюсь достичь:

Теперь я хочу получить доступ к количеству из ограничения и частоте из правила. Для этого я реализовал этот код ниже, но получаю ошибка неопределенной локальной переменной или ограничение метода

obj=JSON.parse(response)
print(obj)

obj.each do |val|
  id, name = val['id'], val['name']

  puts "ID:   #{id}"
  puts "Name: #{name}"

#get quqntity
  val.capping.each do |cap|
    quantity = cap['quantity']

    puts "QTY:   #{quantity}"

      #get frequency
      cap.rule.each do |r|
        frequency = r['frequency']

        puts "FRQ:   #{frequency}"


     end


  end

end

Любая идея о том, почему я получаю ошибку выше, может кто-то помочь мне решить проблему

1 Ответ

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

Вам необходимо получить доступ к capping так же, как вы id и name. Руби считает val.capping методом. Попробуйте использовать это:

val[:capping]

или

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