如何使用has_many,:dependent =>:destroy来销毁记录

AnA*_*ice 6 ruby-on-rails ruby-on-rails-3 dependent-destroy

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

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

class PhotoAlbum < ActiveRecord::Base
has_many :photos, :dependent => :destroy
Run Code Online (Sandbox Code Playgroud)

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

鉴于AuditLog表没有"photo_album_id"列,并且不能,是否有办法在删除PhotoAlbum时设置依赖> Destory with Rails删除teh AuditLog中的所有相关项?

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

Bre*_*der 5

我认为你要找的是组合

belongs_to :feeded, :polymorphic => true

在您的审计日志类和

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

在你的PhotoAlbum课程中.

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

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

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