Post

activerecord-importで一括してupsert

解決

column_names = User.column_names models = [] # datasには[{id: 1, name: 'hoge'...}...] datas.each do |data| User.find_or_initialize_by(id: data[:id]) do |model| # FIXME: In this case, new_record is not working model.assign_attributes(data) models << model end end User.import(models, on_duplicate_key_update: { conflict_target: %i(id), columns: column_names })
new_record?メソッドで新規作成か判定しようとしたが、全て新規作成となる(バグ?)

zdennis/activerecord-import: A library for bulk insertion of data into your database using ActiveRecord. [Rails]find_or_create_byとfind_or_initialize_by Railsで一括でデータを更新する · aguuu.com

This post is licensed under CC BY 4.0 by the author.