質問

:destroyメソッドの動作を上書きするために多くのことを試みましたが、何も機能しません。最初にacts_as_paranoiaプラグインを使用しましたが、has_many:throughアソシエーションのモデルでは機能しません。

次のようなことをするためだけに:destroyメソッドを上書きしたい: ジェネラコディセタグプレ

つまり、レコード自体を破棄するのではなく、別のフィールド(ステータスを0)を更新したいだけです。

役に立ちましたか?

解決

試しましたか?: ジェネラコディセタグプレ

編集:コメントに基づいて、何か他のものが機能している可能性があり、それはアソシエーション定義の(:dependent=> '')指定である可能性があります-またはそれがHABTMの場合、まったく機能しない可能性があります。たぶん関連付けによる削除と破棄に関するこの情報が役立つでしょうか?以下に関連するセクションを貼り付けました:

削除または破棄しますか?

has_manyおよびhas_and_belongs_to_manyアソシエーションにはメソッドがあります destroy、delete、destroy_all、delete_all。

has_and_belongs_to_manyの場合、削除と破棄は同じです。 結合テーブルのレコードを削除します。

has_manyの場合、destroyは常にのdestroyメソッドを呼び出します コールバックが実行されるようにレコードが削除されます。ただし、削除は によって指定された戦略に従って削除を行う :dependentオプション、または:dependentオプションが指定されていない場合は、 デフォルトの戦略に従います。デフォルトの戦略は:nullifyです( デフォルトのhas_many:throughを除いて、nilへの外部キー) 戦略はdelete_allです(結合レコードを実行せずに削除します コールバック)。

他のヒント

これを行う最善の方法は、before_destroy:フィルターを上書きして依存関係を操作することだと思います: ジェネラコディセタグプレ

ただし、destroyはキャンセルされません。

完全なコールバックドキュメントはこちらです。

マイクドが言ったように、このコードは、品種を「手動で」破壊したい場合に適していました: ジェネラコディセタグプレ

これは完全に機能します。ただし、前述したように、親レコードを更新すると、子で呼び出されたdestroy / delete / delete_allメソッドが見つかりませんでした...したがって、誰かがアイデアを持っている場合は...

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top