Доступ к вложенным элементам хэша
Есть yml файл с вложенными элементами, нужно загрузить всю информацию в виде хэша (используя HashWithIndifferentAccess). Пробежаться по полученному хэшу и добавить в базу данных объекты Project и Todo (todo добавить соответствующим проектам). Вот файл seeds.yml:
projects:
- title: 'Семья'
todos:
- text: 'Купить молоко'
isCompleted: false
- text: 'Заменить масло в двигателе до 23 апреля'
isCompleted: false
- text: 'Отправить письмо бабушке'
isCompleted: true
- text: 'Заплатить за квартиру'
isCompleted: false
- text: 'Забрать обувь из ремонта'
isCompleted: false
- title: 'Работа'
todos:
- text: 'Позвонить заказчику'
isCompleted: true
- text: 'Отправить документы'
isCompleted: true
- text: 'Заполнить отчет'
isCompleted: false
Использую такую структуру (она выводит просто все элементы ассоциаций):
seed_file = File.join(Rails.root, 'db', 'seeds.yml')
config = YAML.load_file(seed_file)
conf = HashWithIndifferentAccess.new(config)
conf.each do |project|
puts project
puts "\n"
end
Вот что выводит:
projects
{"title"=>"Семья", "todos"=>[{"text"=>"Купить молоко", "isCompleted"=>false}, {"text"=>"Заменить масло в двигателе до 23 апреля", "isCompleted"=>false}, {"text"=>"Отправить письмо бабушке", "isCompleted"=>true}, {"text"=>"Заплатить за квартиру", "isCompleted"=>false}, {"text"=>"Забрать обувь из ремонта", "isCompleted"=>false}]}
{"title"=>"Работа", "todos"=>[{"text"=>"Позвонить заказчику", "isCompleted"=>true}, {"text"=>"Отправить документы", "isCompleted"=>true}, {"text"=>"Заполнить отчет", "isCompleted"=>false}]}
Никак не могу обратиться даже к элементам "title". Проекты и задачи добавляются в базу так:
project = Project.create title: "Проект 1"
todo = Todo.create text: "Сделать что-то"
project.todos << todo
Ответы (1 шт):
Автор решения: Dicoquil
→ Ссылка
Разобрался. Выкладываю решение, вдруг кому-то поможет. Изменил структуру seeds.yml вот так
seed_file = File.join(Rails.root, 'db', 'seeds.yml')
config = YAML.load_file(seed_file)
conf = HashWithIndifferentAccess.new(config)
conf[:projects].each do |project|
@project = Project.create({title: project[:title]})
puts project[:title]
project[:todos].each do |todo|
@project.todos.create ({text: todo[:text], isCompleted: todo[:isCompleted]})
puts todo[:text]
end
@todos = @project.todos.all
puts "\n"
end
Все отлично добавляется в базу данных.