我在一些插件的帮助下构建了一个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中的所有相关项目?
谢谢,我知道这个比大多数人复杂一点。感谢您阅读!
答案 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'
上。由于这不需要对数据库进行任何更改,因此所有现有代码都应继续有效。