ActiveRecord create:传入一组属性

时间:2015-05-02 10:20:41

标签: ruby-on-rails activerecord

我想知道是否存在通过传入属性数组来创建多个记录的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])

但它不起作用。有没有类似的方法来实现这一点而不循环?

2 个答案:

答案 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!,这是用于批量插入的方法。

您可以在https://edgeapi.rubyonrails.org/classes/ActiveRecord/Persistence/ClassMethods.html#method-i-insert_all-21

中找到该文档的文档

值得一提的是,Rails 6还实现了Model#upsert_all!,可以在记录存在的情况下有效地插入或更新。