批量将数据插入到具有关联的rails DB中

时间:2016-05-23 10:49:02

标签: ruby-on-rails ruby ruby-on-rails-4 bulkinsert

我想复制并批量插入数据到数据库(使用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创业板,我尝试了多级示例,但仍然没有保存问题。有什么想法吗?

1 个答案:

答案 0 :(得分:0)

我相信您需要启用ActiveRecord :: NestedAttributes(请参阅:http://api.rubyonrails.org/classes/ActiveRecord/NestedAttributes/ClassMethods.html以供参考)。

之后你需要改变

section.questions

进入

section.questions_attributes

并添加

accepts_nested_attributes_for :questions

部分模型

请记住,我不完全确定如何将现有问题作为关联插入。