我有类似以下的内容:
module Bar < ActiveRecord::Base
belongs_to :foo
...
module Foo < ActiveRecord::Base
has_many :bars, dependent: :destroy
def build_bars
1000.times do |i|
bars.build(num: i)
end
end
def create_default_bars!
build_bars
save
end
请注意,
Foo#build_bars
很便宜。即使它循环1000次,也需要很少的时间。但是,一旦你点击save
,ActiveRecord突然决定执行1000个插入操作,这非常慢。我该如何编写一个自定义的
save_the_bars
方法,以便为我构建的所有bars
执行单个批量INSERT查询(提醒您,1000个build
显然非常便宜),但在此示例中作为save
的替代品?
我期望你能给出与此博客文章推荐 #3 类似的答案:
但由于我的示例使用了 build
并依赖于一些稍微复杂的 Rails 魔法,因此如何将其转换并不立即显然。加分项为基准测试!