首页 > 解决方案 > 删除关联时运行回调

问题描述

在 Rails 6 应用程序中,我有以下标准关联。

class Course < ApplicationRecord
 belongs_to :degree

 after_save :do_something

  def do_something
   puts "done something"
  end
end

class Degree < ApplicationRecord
 has_many :courses 
end

我添加/删除带有s数组的@degree.courses = collection课程。collectionCourse

collection包括一个新的Course一切都按我的预期工作:

但是,当记录更新(设置为)时collection,不包含Course先前关联的@degree do_soemthingdegree_idnil

下面是我的日志中的查询示例

UPDATE "courses" SET "degree_id" = $1 WHERE "courses"."id" IN (SELECT "courses"."id" FROM "courses" WHERE "courses"."degree_id" = $2 AND "courses"."id" = $3) [["degree_id", nil], ["degree_id", 1], ["id", 1"]]

为什么不do_soemthing执行?这是预期的行为吗?如果是这样,是否有另一个回调我可以用来确保do_soemthing在删除记录更新时执行degree_id

标签: ruby-on-rails

解决方案


推荐阅读