2016-05-23 2 views
1

Я хотел скопировать и насыпные данные вставки в базу данных (с помощью bulk_insert GEM), поэтому я попытался следующее:Объемные данные вставки в рельсах DB с ассоциациями

@questionnaires = Questionnaire.where(:id => params[:id]) 
@new_sections = [] 

@questionnaires.includes(:sections, :questions).each do |questionnaire| 
    questionnaire.sections.each do |section| 
    s = section.dup 
    s.questionnaire_id = nil 
    new_section = Section.new(s.attributes.reject{|k, v| ["id", "created_at", "updated_at"].include?(k)}) 
    questions = [] 

    section.questions.each do |question| 
     q = question.dup 
     q.section_id = nil 
     questions << q.attributes.reject{|k, v| ["id", "created_at", "updated_at"].include?(k)} 
    end 

    new_section.questions.build(questions) 
    @new_sections << new_section 
    end 
end 

Теперь здесь @new_sections имеет все разделы с попутным вопросов, но не сохраняется.

СОХРАНЕНИЕ

Section.transaction do 
    Section.bulk_insert values: @new_sections.map(&:attributes) 
end 

Но это спасает только разделы, но не это ассоциации. Как я могу сохранить ассоциации (вопросы).

EDIT

Теперь, я наткнулся на этот https://github.com/zdennis/activerecord-import/wiki GEM, и я пытаюсь на примере Multi-Level, еще вопросы не сохраняются. Есть идеи?

ответ

0

Я верю, что вам необходимо включить ActiveRecord :: NestedAttributes (см.: http://api.rubyonrails.org/classes/ActiveRecord/NestedAttributes/ClassMethods.html для справки).

После этого вам нужно будет изменить

section.questions 

в

section.questions_attributes 

и добавить

accepts_nested_attributes_for :questions 

в разделе модели

Имейте в виду, я не совсем уверен, как было бы ork с вставкой существующих вопросов в качестве ассоциации.

+0

У меня уже есть ;-) – Abhi

+0

@Abhi Вы уже решили проблему? Или у вас есть NestedAttributes? Если последние вы взглянули на имя массива 'questions_attributes' вместо' questions'? Если первый, пожалуйста, закройте вопрос/примите ответ/опубликуйте собственное решение? – Negnar

Смежные вопросы