🗑️
論理削除した親から子を参照する【Paranoia】
概要
Paranoiaで親を論理削除し、削除した親から子を参照したかったが、ネットを調べても出てこなかったので備忘録
結論
子供側にwithout_default_scope: true
を付ける
class Parent < ApplicationRecord
acts_as_paranoid
has_one :child, dependent: :destroy
end
class Child < ApplicationRecord
+ acts_as_paranoid without_default_scope: true
belongs_to :parent
end
without_default_scope: true
を付けることでデフォルトで発行されるdeleted_at IS NULL
がなくなるので、削除した子を参照してもNULL
になることは無くなる
検証
$ rails c
irb(main):007:0> Parent.find(1).destroy!
irb(main):002:0> Parent.only_deleted.find(1).child
Parent Load (0.5ms) SELECT `parent`.* FROM `parent` WHERE `parent`.`deleted_at` IS NOT NULL AND `parent`.`id` = 1 LIMIT 1
Child Load (1.0ms) SELECT `child`.* FROM `child` WHERE `child`.`parent_id` = 1 LIMIT 1
Discussion