💦
あれっ?deleted_atしたレコードが取得できない?【ActiveRecord::RecordNotFound, Rails】
前提
論理削除に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するだけでは取得できない
deleted_atが付いたレコードは、単にfindするだけでは取得できないようです。
ではどうすればいいか。
paranoiaのクラスメソッドにwith_deletedというものが存在するので、それを使ってfindします。
ActiveRecordで書くとこう。
2.7.0 :020 > RoomSetting.with_deleted.find(22075)
=> #<RoomSetting id: 22075, ...
deleted_atしたレコードを取得できました!
Discussion