ruby-on-rails - Rails - 检查父对象是否被销毁并调用 destroy on dependents

标签 ruby-on-rails activemodel

我有以下内容:

class ModelA < ApplicationRecord
  has_many :model_bs, dependent: :destroy
end

class ModelB < ApplicationRecord
  belongs_to :model_a
  after_destroy :action_only_if_model_a_exists

  private

  def action_only_if_model_a_exists
    # Do things
  end
end

当我调用 model_a.destroy 时,我需要能够在 ModelB 的 action_only_if_model_a_exists 回调中确定关联的 ModelA 是否仍然存在或是否也即将被销毁.

是否有一个很好的内置 Rails 方法来执行此操作,或者我是否需要在较早的回调(例如 before_destroy)中沿着在 ModelA 中设置标志的路径进行下去,然后我可以检查 ModelB 的回调?

编辑

我已经进行了多次测试并确认在 action_only_if_model_a_exists 回调中,执行以下操作没有帮助:

> model_a.persisted?
true

> model_a.destroyed?
false

> model_a.frozen?
false

最佳答案

您可以在子对象中使用 destroyed_by_association 属性来查看对象是否作为 dependent::destroy 的一部分从其父对象中销毁。

关于ruby-on-rails - Rails - 检查父对象是否被销毁并调用 destroy on dependents,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55369777/

相关文章:

mysql - 获取事件记录中组的第一个子项

validation - 导轨 3 : Custom error message in validation

ruby-on-rails-3 - 使用 ActiveModel Validations 验证子对象

ruby-on-rails - ActiveModel 属性

ruby-on-rails - 使用 Capybara 测试仅限 SSL 的 URL 的最佳方法是什么?

ruby-on-rails - 在Rails迁移中定义方法

javascript - 当推送到 Heroku 时,twitter bootstrap 模态不起作用

ruby-on-rails - Capybara Rspec 测试失败可能对 AJAX 造成影响 - 测试 contenteditables

ruby-on-rails - 在 ActiveModel 对象上,如何检查唯一性?