Застрял, получая импорт activerecord, чтобы взять вложенные данные хеша JSON - PullRequest
0 голосов
/ 20 октября 2018

В рельсах я пытаюсь использовать Active Record import для заполнения database возможных сегментов курса для школьных предметов, прочитанных из файла JSON.Поля базы данных - это идентификатор субъекта, имя сегмента и идентификатор сегмента.

Проблема, с которой я сталкиваюсь, состоит в том, что два из этих полей, имя сегмента и идентификатор, находятся во вложенном проанализированном хэше JSON.Теперь с кодом, приведенным ниже, когда я заканчиваю работу и пытаюсь вызвать import, я получаю error, говорящее, что "When importing an array of hashes with provided columns, each has must have keys for each column."

Однако, когда я использую отладчик для проверки значений столбцов, большинствоиз них полно без проблем вообще.Я обнаружил, что у нескольких предметов просто не было сегментов, поэтому я ввел временное значение «nil» для некоторых значений и все еще сталкиваюсь с ошибкой.Любые идеи?

import = []
columns = [:segment_id, :name, :subject_id]
subjects.each do |row|
  import << {subject_id: row["id"]}
  if row["segments"].count == 0
    import << {segment_id: "nil", name: "nil"}
  else
    row["segments"].each do |segment|
      import << {segment_id: segment["id"], name: segment["name"]}
    end
  end
end
Segment.import columns, import

Вот пример записи JSON для справки.Обратите внимание, что для некоторых из них сегменты (что я хочу) являются пустыми:

    {
      "name": "Mathematics",
      "abbreviation": "Mathematics",
      "id": "1161-4700"
      "segments": [{
       "name": "Courses of Instruction",
       "id": "0"
      }, {
        "id": "1",
        "name": "Primarily for Undergraduate Students"
      }, {
        "name": "For Both Undergraduate and Graduate Students",
        "id": "2"
      }, {
        "name": "Primarily for Graduate Students",
        "id": "3"
      }, {
        "name": "Cross-Listed in Mathematics",
        "id": "4"
      }]
},
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...