6

我在几个插件的帮助下构建了一个 Rail 3 AuditLog,这些插件将数据存储在一个 AuditLog 表中,其中包含以下用于识别的字段(feeded_id,feeded_type)

因此,就我而言,我有一个包含许多照片的相册。

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

当我删除相册 (id=2) 时,这可以很好地删除所有关联的照片,但它不会从 AuditLog 中删除如下所示的项目:(feeded_id = 2, feeded_type = PhotoAlbum)

鉴于 AuditLog 表没有“photo_album_id”列,并且不能,有没有办法使用 Rails 设置依赖 > Destory 以在删除 PhotoAlbum 时删除 AuditLog 中的所有关联项目?

谢谢,我知道这个比大多数复杂一点。感谢您通读!

4

1 回答 1

5

我认为您正在寻找的是

belongs_to :feeded, :polymorphic => true

在您的审核日志类和

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

在您的相册课程中。

如果你没有一个类来代表你的审计日志,你应该能够将它添加belongs_to到现有的类中(也许在你的插件中?)。

我不是 100% 确定 :as => :feeded 选项,您必须正确命名该符号并且我不确定 ActiveRecord 会期望什么,但是该belongs_to关系将查找 feeded_id 和 feeded_type,所以当'父' 对象是一个相册,它将正确加入photo_album.id = audit_logs.feeded_id AND audit_logs.feeded_type = 'PhotoAlbum'。由于这不需要对数据库进行任何更改,因此所有现有代码都应该继续工作。

您可以在此处阅读关联选项

于 2010-11-01T21:04:59.617 回答