Застрял получение импорта ActiveRecord, чтобы взять в гнездовой JSON хэш данных

голоса
0

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

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

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

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
      }]
},
Задан 20/10/2018 в 05:06
источник пользователем
На других языках...                            

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more