has_manyでレコードを破壊する方法:dependent =>:破壊
-
28-09-2019 - |
質問
いくつかのプラグインの助けを借りてRail 3 auditlogを作成しました。そのデータを識別用の次のフィールドを備えたauditlogテーブルに保存します(feeded_id、feeded_type)
だから私の場合、私は写真をhas_manyの写真を持っています。
class PhotoAlbum < ActiveRecord::Base
has_many :photos, :dependent => :destroy
Photo Aalbum(ID = 2)を削除すると、これは関連するすべての写真を削除するために非常にうまく機能しますが、次のような監査ログからアイテムを削除しません:(Feeded_id = 2、Feeded_type = Photoalbum)
auditlogテーブルには「photo_album_id」列がないことを考えると、できないことを考えると、Photoalbumが削除されたときにauditlogのすべての関連アイテムを削除するためにレールで依存関係> DESTORYをセットアップする方法はありますか?
おかげで、私はこれがほとんどよりも少し複雑であることを知っています。それを読んでくれてありがとう!
解決
私はあなたが探しているのはの組み合わせだと思います
belongs_to :feeded, :polymorphic => true
監査ログクラスで
has_many :logs, :as => :feeded, :dependent => :destroy
あなたのフォトアルバムクラスで。
監査ログを表すクラスがない場合は、 belongs_to
既存のクラスに(おそらくプラグイン内ですか?)。
私は次のことについて100%確信がありません:as =>:給餌オプション、あなたはそのシンボルを正しく名前にする必要があり、ActivereCordが何を期待するかはわかりませんが、 belongs_to
関係はfeeded_idとfeeded_typeを探すので、「親」オブジェクトがフォトアルバムである場合、それは正しく結合します photo_album.id = audit_logs.feeded_id AND audit_logs.feeded_type = 'PhotoAlbum'
. 。これにはデータベースの変更は必要ないため、既存のコードはすべて機能し続けるはずです。
で読むことができます ここの協会のオプション.