gpt4 book ai didi

ruby-on-rails - 如何使用 has_many, :dependent => :destroy 销毁记录

转载 作者:行者123 更新时间:2023-12-04 15:15:42 26 4
gpt4 key购买 nike

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

所以就我而言,我有一个相册,里面有_许多照片。

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

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

鉴于 AuditLog 表没有“photo_album_id”列,并且不能,有没有办法设置从属 > Destory with Rails 以在删除 PhotoAlbum 时删除 AuditLog 中的所有关联项目?

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

最佳答案

我认为你正在寻找的是
belongs_to :feeded, :polymorphic => true
在您的审计日志类和
has_many :logs, :as => :feeded, :dependent => :destroy
在您的相册类(class)中。

如果你没有一个类来代表你的审计日志,你应该能够添加 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 .

关于ruby-on-rails - 如何使用 has_many, :dependent => :destroy 销毁记录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4072919/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com