【发布时间】:2016-10-01 05:34:25
【问题描述】:
我看到一个问题,即删除父模型的子记录时不会触发子记录上的销毁回调。从表单更新记录时会出现此问题,但我认为这无关紧要。
class Job
has_many :assignments, dependent: :destroy
has_many :scheduled_assignments, -> { scheduled }, class_name: 'Assignment'
accepts_nested_attributes_for :scheduled_assignments, dependent_destroy: true
end
class Assignment
belongs_to :job
after_destroy :call_me
after_save :call_me
def call_me
puts "I got called"
end
end
job = Job.create
job.update({ scheduled_assignment_ids: [1] })
# a scheduled assignment is created, and the after_save
# callback is called in assignment
job.update({ scheduled_assignment_ids: [] })
# the scheduled assignment is deleted,
# but the after_destroy callback is not fired
因为 Rails 文档提到应该使用“销毁”操作而不是“删除”来删除子记录,所以我希望在被删除的 Assignment 对象上触发回调。
【问题讨论】:
-
更新可以触发这样的销毁吗?要么你应该打电话给
job.destroy(),要么我错过了一些关于 ActiveRecord 是如何工作的。 -
我认为它应该,尤其是当更新触发保存/创建回调时。似乎提交操作应该触发所有回调或都不触发。
标签: ruby-on-rails ruby ruby-on-rails-4