カクカクしかじか

技術的なアレコレ

mongoidのupdate_allにバグがあるかもしれない?

gemのバージョン

mongoid 6.1.1

MongoDBのバージョン

Docker使用

mongo:3.6.12

概要

一対多のモデルに対する update_all が正しく動いてなさそう...

雑な例 (実際のコードとは関係ありません)

Orderモデルにpending(入金待ち)、complete(決済完了)とcancel(購入キャンセル)のステータスがあって、Userが退会ボタン押下した時にcomplete(決済完了)になっていないOrderのキャンセルを行う場合。

$ user.orders.update_all(status: 'cancel')
$ user.orders.first.status
=> pending

# 本来はcancelに更新されるべきはず
$ user.orders.update_all(status: 'cancel')
$ user.orders.first.status
=> cancel

最後に

直近では update_all を使わずに実装することで回避しましたが、バグ?っぽいので時間を見つけてプルリクを送ってみたいと思います。