paranoia を使った論理削除では、destroy したとき deleted_at が設定されるだけでなく、コールバックも実行される。
そのため
class User < ActiveRecord::Base acts_as_paranoid has_many :items, dependent: :destroy end
上記の User で destroy を実行すると items が削除される。
論理削除でコールバックが実行されるのが今回都合が悪かったので、paranoia のソースコードを見ながら、destroy を上書きして対処してみた。
class User < ActiveRecord::Base acts_as_paranoid has_many :items, dependent: :destroy def destroy # paranoia で定義されているメソッドを呼び出して、 # deleted_at に時間をセット result = touch_paranoia_column(true) result ? self : false end end
その場しのぎ感が強いので、他の方法を考えたほうがいいかも。dependent オプションを外すとか。とりあえずメモしておく。