1

削除済みフラグを設定してから false を返すコールバックを追加することにより、単純なソフト削除システムをセットアップしようとしていbefore_destroyます (実際の破棄が発生しないようにするため)。

class Project < ActiveRecord::Base

    belongs_to :user

    before_destroy :soft_delete

    def soft_delete
        self.update( is_deleted: 1 )
        false
    end

end

これにより、レコードが更新されることはありません。理由はわかりません。ログに表示[1m[36m (0.4ms)[0m [1mROLLBACK[0mされますが、関連性があるかどうかはわかりません。

4

4 に答える 4

3

self.update_columns(is_deleted: true)はうまくいくかもしれないと思います...

于 2013-09-11T20:16:21.423 に答える
1

ここを見て

before_* コールバックが false を返す場合、それ以降のすべてのコールバックと関連するアクションはキャンセルされます。after_* コールバックが false を返す場合、それ以降のコールバックはすべてキャンセルされます。コールバックは通常、最後に呼び出されるモデルのメソッドとして定義されたコールバックを除いて、定義された順序で実行されます。

于 2013-09-11T20:02:27.493 に答える