ruby-on-rails 为什么我的ActiveRecord(v6)`before_destroy`回调没有触发?

7ajki6be  于 5个月前  发布在  Ruby
关注(0)|答案(1)|浏览(68)

我有一个模型,其中X可以包含许多YY可以包含许多Z。这是一个树--一个子节点不能属于多个父节点。
put语句告诉我,当我调用y.delete时,before_destroy回调函数没有被触发,但是delete方法被触发了。
显然我可以把钩子放在delete方法中,但我很好奇为什么destroy回调不起作用。

class Y < ApplicationRecord
  before_destroy :do_before_destroy, prepend: true
  belongs_to :x
  has_many :zs, dependent: :destroy

  def delete
    puts "in delete"
    super
  end

private

  def do_before_destroy
    puts "do_before_destroy"
    self.zes.destroy_all
  end
end

字符串

9rbhqvlz

9rbhqvlz1#

您想使用destroyActiveRecord 中的某些方法不会触发回调,delete就是其中之一:
只需在记录的主键上使用一条SQL语句删除该行,并且不执行任何回调
...
要强制执行对象的before_destroyafter_destroy回调或任何:dependent关联选项,使用destroy

  • 网址:http://api.rubyonrails.org/classes/ActiveRecord/Persistence.html#method-i-delete*

相关问题