Active Record で UPSERT する方法

追記の追記

2019/06/23 時点では、activerecord-import を使う のがベストプラクティスかと思います。

追記

gem がありました。

注意

↓のやりかたは厳密には UPSERT にはならないです。各ドキュメントを当たってみてください。

結論

Userモデルを対象にすると仮定した場合、以下のようにfind_or_initialize_byメソッドで検索をかけて、saveメソッドをチェインすればよいです。

User.find_or_initialize_by(
  name: 'tomoyo',
  age: 23,
  gender: 'female',
).save

補足

便利なgemがあるかもしれませんが*1、ササッと書く場合はこれでいいでしょう。

*1:きっとあるでしょう

Powered by はてなブログ