同时批量插入父母/子女

时间:2016-06-23 12:38:13

标签: mysql ruby-on-rails activerecord

我正在尝试将一对父/子模型的bulk insert添加到MySQL数据库表中,但似乎我无法使用标准的ActiveRecord功能来实现它。 所以,我尝试了activerecord-import gem,但它不支持MySQL的递归插入......

# Book has_many authors / Author belongs to Book
books = []
10000.times do |i| 
  book = Book.new(:name => "book #{i}")
  book.author.build(:name => "author #{i}")
  books << book
end
Book.import books, recursive: true # THIS DOES NOT WORK

我也尝试使用原始SQL实现它,但是我无法找到保留每个父/子的引用的方法,因为在我想插入子数据的时候,它的父节点没有它的id然而,
任何人都知道如何解决这个问题?

2 个答案:

答案 0 :(得分:0)

请尝试这样:

books = []
10000.times do |i| 
  book.name = "book #{i}")
  books << book
end
Book.import books // Here it creates Books

我不确定如何继续创作作者...

答案 1 :(得分:0)

你必须使用嵌套属性

预订模型中的

accepts_nested_attributes_for :author

比你可以用下一个方式做到的

books = []
10_000.times do |i| 
  books << { name: "book #{i}", author_attributes: { name: "author_#{i}" }
end

Book.create(books) # it will create all object in single transaction