我想知道是否存在通过传入属性数组来创建多个记录的Rails方法。
例如,而不是
MyModel.create!(attr_1: some_attr, attr_2: 1)
MyModel.create!(attr_1: some_attr, attr_2: 2)
MyModel.create!(attr_1: some_attr, attr_2: 3)
MyModel.create!(attr_1: some_attr, attr_2: 4)
我想做点什么:
MyModel.create!(attr_1: some_attr, attr_2: [1,2,3,4])
但它不起作用。有没有类似的方法来实现这一点而不循环?
答案 0 :(得分:17)
根据文档,您可以create
来自一系列哈希的记录:
attributes参数可以是Hash或Array of 哈希值。这些哈希描述了对象的属性 要被创造。
MyModel.create([{attr_1: some_attr, attr_2: 4}, {attr_1: some_attr, attr_2: 5}])
答案 1 :(得分:4)
在询问问题时,ActiveRecord没有任何内置功能可以一次有效地插入多个记录。从今天开始,Rails 6是当前的稳定版本,它随附Model#insert_all!
,这是用于批量插入的方法。
值得一提的是,Rails 6还实现了Model#upsert_all!
,可以在记录存在的情况下有效地插入或更新。