我想复制并批量插入数据到数据库(使用bulk_insert GEM),所以我尝试了以下内容:
@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
包含所有相关问题的部分,但未保存。
SAVING
Section.transaction do
Section.bulk_insert values: @new_sections.map(&:attributes)
end
但是,这只会保存部分而不是它的关联。我怎样才能保存关联(问题)。
修改
现在,我遇到了这个https://github.com/zdennis/activerecord-import/wiki创业板,我尝试了多级示例,但仍然没有保存问题。有什么想法吗?
答案 0 :(得分:0)
我相信您需要启用ActiveRecord :: NestedAttributes(请参阅:http://api.rubyonrails.org/classes/ActiveRecord/NestedAttributes/ClassMethods.html以供参考)。
之后你需要改变
section.questions
进入
section.questions_attributes
并添加
accepts_nested_attributes_for :questions
部分模型
请记住,我不完全确定如何将现有问题作为关联插入。