💦

あれっ?deleted_atしたレコードが取得できない?【ActiveRecord::RecordNotFound, Rails】

2023/01/23に公開

前提

https://github.com/rubysherpas/paranoia

論理削除にparanoiaというGemを使用している場合の対処法です!!

paranoia先輩の不思議な魔法

Roomsテーブルから「削除したレコード」を取得したいので、いつも通りfindで取得、、

2.7.0 :007 > Room.find(22075)
Traceback (most recent call last):
        1: from (irb):7
ActiveRecord::RecordNotFound (Couldn't find RoomSetting with 'id'=22075 [WHERE `room_settings`.`deleted_at` IS NULL])

oops!!

確かに削除したRoomのIDは「22075」だったはず、、、

paranoiaで削除したレコードは単にfindするだけでは取得できない

https://techblog.kyamanak.com/entry/2017/09/16/192518

deleted_atが付いたレコードは、単にfindするだけでは取得できないようです。

ではどうすればいいか。

paranoiaのクラスメソッドにwith_deletedというものが存在するので、それを使ってfindします。

ActiveRecordで書くとこう。

2.7.0 :020 > RoomSetting.with_deleted.find(22075)
 => #<RoomSetting id: 22075, ... 

deleted_atしたレコードを取得できました!

Discussion