以下の内容はhttps://tnakamura.hatenablog.com/entry/2014/07/01/113000より取得しました。


paranoia を使った論理削除でコールバックを実行しない

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 オプションを外すとか。とりあえずメモしておく。




以上の内容はhttps://tnakamura.hatenablog.com/entry/2014/07/01/113000より取得しました。
このページはhttp://font.textar.tv/のウェブフォントを使用してます

不具合報告/要望等はこちらへお願いします。
モバイルやる夫Viewer Ver0.14