2010-11-01 49 views
6

我在一些插件的帮助下构建了Rail 3 AuditLog,它将数据存储在AuditLog表中,其中包含以下字段用于标识(feeded_id,feeded_type )如何使用has_many来破坏记录:dependent =>:destroy

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

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

当我删除照片集(ID = 2)这个作品非常好,删除所有相关联的照片,但它不会删除审计日志是这样的内容:(feeded_id = 2,feeded_type =天地我的相簿)

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

谢谢,我知道这个比最复杂一点。感谢您阅读它!

回答

4

我想你正在寻找的是

belongs_to :feeded, :polymorphic => true

在审计日志类

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

在你的天地我的相簿类的组合。

如果你没有一个类来表示你的审计日志,你应该能够将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'上正确连接。由于这不需要对数据库进行任何更改,因此您现有的所有代码都应该可以继续工作。

您可以在options for associations here上阅读。

相关问题