Rails (Active Record) で複数のレコードを一括登録する際の #new 〜 #save と #create の違い

結論

  • #create の場合も #new 〜 #save の場合も引数に配列を取ることができる
  • #create の場合` はまとめて*1 登録できる
  • #new 〜 #save の場合は、#new で引数に配列を取った後に、each で回して個別に #save する

具体例

users テーブルに 2つ のレコードを保存する例を考えてみます。

#create を用いる場合

User.create(
  [
    {
      name: 'taro',
      age: 20
    },
    {
      name: 'hanako',
      age: 25
    }
  ]
)

#new 〜 #save を用いる場合

users = User.new(
  [
    {
      name: 'taro',
      age: 20
    },
    {
      name: 'hanako',
      age: 25
    }
  ]
)

users.each do |user|
  user.save
end

使い分け

使い分けは以下の記事に詳しいです。

pikawaka.com

参考

Bulk Insert をするための activerecord-import という gem もあります。

github.com

*1:SQL ひとつで

Powered by はてなブログ