【问题标题】:does cloning affect activerecord callbacks?克隆会影响 activerecord 回调吗?
【发布时间】:2009-04-13 09:28:24
【问题描述】:

我有一系列想要级联销毁的 ActiveRecord 对象,但其中一些对象没有被删除。

基本上我有以下几点:-

class Project < ActiveRecord::Base

  has_many :tasks, :dependent => :destroy
  has_many :schedules, :dependent => :destroy
  has_many :project_schedules, :through => :schedules, :class_name => "Project", :dependent => :destroy

end

class Schedule < ActiveRecord::Base

  belongs_to :project_schedule, :class_name => "Project"
  belongs_to :project

end

class Task < ActiveRecord::Base

  belongs_to :project

end

其中 Project 是项目的定义,Task 是对该项目的任务的定义,而 Schedule a has_many :through 将原始项目链接到另一个项目,这是原始项目的计划。

当我创建计划时,我正在对原始项目进行深度克隆(即计划是原始项目的克隆,并且计划中的每个任务都是原始计划中的任务的克隆)。

当我执行 schedule.destroy 时,我希望计划项目及其所有相关任务都被删除。但是,只有计划项目被删除,计划任务仍然存在。

这不是缓存问题,因为记录仍在数据库中。此外,在数据库中肯定会创建单独的任务,其中 schedule id 作为项目 id 和它们自己的唯一 id。

回调仍然会在克隆对象上触发吗?我是不是漏了个小把戏?

【问题讨论】:

    标签: ruby-on-rails activerecord associations callback


    【解决方案1】:

    从你的类描述来看,当你销毁一个 Schedule 对象时,我不会期望级联删除。如果您删除一个项目对象,那么 Rails 应该通过子任务和计划(不太确定这里的项目计划是什么)并删除记录,因为 :dependent =&gt; :destroy 选项。任务和计划是 Project 的子项,不会导致父项被删除。

    如果您想在删除计划时删除父项目,我可能会考虑编写 after_delete 回调。

    【讨论】:

    • 谢谢,迈克尔。你是对的,我把这个弄错了。我将看看使用 after_delete 回调。非常感谢。
    猜你喜欢
    • 2011-03-19
    • 2015-01-23
    • 2011-12-11
    • 2020-10-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-10-04
    相关资源
    最近更新 更多