ruby-on-rails - 删除关联时运行回调
问题描述
在 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
课程。collection
Course
当collection
包括一个新的Course
一切都按我的预期工作:
- 课程已创建。
do_something
运行。
但是,当记录更新(设置为)时collection
,不包含Course
先前关联的@degree
do_soemthing
degree_id
nil
下面是我的日志中的查询示例
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
?
解决方案
推荐阅读
- ads - 如何将 Google Adsense AUTO ADS 居中对齐?
- arrays - 为什么接收到的元素总是保存在第一位?
- python - 如何在 Django 模型上创建可为空的字段
- c# - 如果该项目尚未在该数组列表中,则 C# 将项目添加到该数组列表中
- graphql-dotnet - 没有服务器的 Graphql
- c# - 如何在 ASP.NET Core 中更改异常语言
- android - Android Canvas PorterDuff 未正确屏蔽
- elf - 在使用 --adjust-section-vma 进行 objcopy 之后,使用 -dSl 的 objdump 不显示与程序集混合的源代码
- nlp - 与 BERT 的字符串比较似乎忽略了句子中的“不”
- arrays - 如何在C代码中使用给定的输入数组生成特定值的数组