В рельсах я пытаюсь использовать 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"
}]
},