【问题标题】:Ruby on Rails - Association gets deleted before "before_destroy"Ruby on Rails - 关联在“before_destroy”之前被删除
【发布时间】:2015-09-29 08:40:18
【问题描述】:

我有一个对象A 有_many B 的(简单关联):

has_many :book_accounts, {
    dependent: :destroy
}

我正在处理before_destroy 回调。在销毁A 之前,我想检查并确保没有C(属于B)和D(属于C)。我检查了日志,所有B 都在回调之前被删除,导致回调崩溃。

Rails 应该是这样工作的吗?除了删除dependent: destroy 并在after_destroy 回调中手动销毁B 之外,我还能做些什么吗?还是这是首选解决方案?

【问题讨论】:

标签: ruby-on-rails callback associations destroy


【解决方案1】:

这是一个非常愚蠢的rails问题,也令人沮丧。在 Rails 中定义关系时,:dependent 选项实际上会创建一个回调。如果您在关系之后定义 before_destroy 回调,则在关系被破坏之前不会调用您的回调。

解决方案是在声明关联之前订购您的before_destroy 回调。

你的代码会是这样的

Class A < ActiveRecord::Base
  before_destroy :check

  has_many :book_accounts, dependent: :destroy
End

【讨论】:

【解决方案2】:

必须在回调声明中添加prepend: true

before_destroy :do_something_before_children_removed, prepend: true

【讨论】:

猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-04-01
  • 1970-01-01
  • 2016-10-18
相关资源
最近更新 更多