如何使用has_many销毁记录,:dependent => :破坏

时间:2010-11-01 20:50:31

标签: ruby-on-rails ruby-on-rails-3 dependent-destroy

我在一些插件的帮助下构建了一个Rail 3 AuditLog,它将数据存储在AuditLog表中,并带有以下用于标识的字段(feeded_id,feeded_type)

所以在我的情况下,我有一张照片有很多照片。

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

当我删除photoalbum(id = 2)时,这非常适合删除所有相关照片,但它不会从AuditLog中删除这样的项目:(feeded_id = 2,feeded_type = PhotoAlbum)

鉴于AuditLog表没有“photo_album_id”列,并且不能,是否有办法设置依赖&gt;带有Rails的Destory在删除PhotoAlbum时删除Teh AuditLog中的所有相关项目?

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

1 个答案:

答案 0 :(得分:5)

我认为您正在寻找的是

的组合

belongs_to :feeded, :polymorphic => true

在您的审核日志类和

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

在PhotoAlbum课程中。

如果您没有代表审计日志的类,您应该能够将belongs_to添加到现有类(可能在插件中?)。

我不是100%肯定:as =&gt; :feeded选项,你必须正确地命名该符号,我不确定ActiveRecord会期望什么,但belongs_to关系将查找feeded_id和feeded_type,所以当'parent'对象是PhotoAlbum时,它将加入正确地在photo_album.id = audit_logs.feeded_id AND audit_logs.feeded_type = 'PhotoAlbum'上。由于这不需要对数据库进行任何更改,因此所有现有代码都应继续有效。

您可以阅读options for associations here