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中的所有相关项?
谢谢,我知道这个比大多数人复杂一点.感谢您阅读!
我认为你要找的是组合
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'.由于这不需要对数据库进行任何更改,因此所有现有代码都应继续工作.
| 归档时间: |
|
| 查看次数: |
10548 次 |
| 最近记录: |