我有一个哈希数组(大约 20k),我需要导入但需要验证,并且还必须使用 paper_trail 创建版本。
arr = [{some_1_id: '1', some_2_id: '2', some_3_id: '3', amount: '123'}, {some_1_id: '1', some_2_id: '2', some_3_id: '3', amount: '123'}]
我有一个这样的哈希数组。在此,我们可以预期大约 20k 元素需要保存到 DB。
我使用了 activerecord-import,但它绕过了所有回调,包括 paper_trail 回调。
我试图像这样运行回调
books.each do |book|
book.run_callbacks(:save) { false }
book.run_callbacks(:create) { false }
end
Book.import(books)
但它没有正确保存 paper_trail 版本。
我所做的是
arr.each do |a|
valid_books = []
book_obj = Book.new
# validate some_1_id
# validate some_2_id
# validate some_3_id
# Some other validations
if book_obj.valid?
valid_books << book_obj
end
end
# Run call backs
Book.import valid_books
它按预期工作,但性能一点也不好。10k 条记录需要 30 多秒。
提前致谢。