6

いくつかのプラグインの助けを借りて、Rail 3 AuditLog を構築しました。これは、識別用の次のフィールド (feeded_id、feeded_type) を持つ AuditLog テーブルにデータを格納します。

私の場合、多くの写真を含むフォトアルバムがあります。

class PhotoAlbum < ActiveRecord::Base
has_many :photos, :dependent => :destroy

写真アルバム (id=2) を削除すると、関連するすべての写真が削除されますが、AuditLog から次のような項目は削除されません: (feeded_id = 2, feeded_type = PhotoAlbum)

AuditLog テーブルに "photo_album_id" 列がなく、できない場合、PhotoAlbum が削除されたときに、AuditLog 内の関連するすべてのアイテムを削除するために、Rails を使用して従属 > Destory をセットアップする方法はありますか?

ありがとう、私はこれが他のものより少し複雑であることを知っています. 読んでくれてありがとう!

4

1 に答える 1

5

あなたが探しているのはの組み合わせだと思います

belongs_to :feeded, :polymorphic => true

あなたの監査ログクラスで

has_many :logs, :as => :feeded, :dependent => :destroy

あなたの PhotoAlbum クラスで。

belongs_to監査ログを表すクラスがない場合は、既存のクラスに (おそらくプラグイン内で)追加できるはずです。

:as => :feeded オプションについては 100% 確信が持てません。そのシンボルに正しく名前を付ける必要があり、ActiveRecord が何を期待するかはわかりませんが、belongs_to関係は feeded_id と feeded_type を探します。オブジェクトは正しく結合される PhotoAlbumphoto_album.id = audit_logs.feeded_id AND audit_logs.feeded_type = 'PhotoAlbum'です。データベースに変更を加える必要がないため、既存のコードはすべて引き続き機能します。

関連付けのオプションについては、こちらを参照してください

于 2010-11-01T21:04:59.617 に答える