我有供应商和职位。当提供者被销毁时,我需要销毁任何职位。但是,当我尝试销毁提供者时,我的check_primary
方法在position.rb
中崩溃。如何跳过依赖型号中的回调销毁
provider.rb
has_many :positions, dependent: :destroy
position.rb
after_destroy :check_primary
def check_primary
unless provider.primary_position # this shouldn't run when destroying a provider
if provider.positions.present?
provider.positions.first.update_column(:primary, true) # crash here
end
end
end
上提供错误破坏:无法更新破坏记录
我的问题
我想提出一个skip_callback在provider.rb
其中跳过check_primary
在position.rb
每当provider.destroy
方法被调用。 我该如何做到这一点?
当从:check_primary
内分析与撬父对象我看到:
>> provider.destroyed?
=> false
>> provider.frozen?
=> false
>> provider.marked_for_destruction?
=> false
UPDATE
我不知道这一点现在...所以这里有一个非常糟糕的解决办法:
def check_primary
unless provider.primary_position
begin
provider.positions.first.update_column(:primary, true)
rescue
nil
end
end
end
对不起一些背景:我在销毁位置时调用此方法,以确保在用户删除主要位置时分配了主要位置。 – Abram
啊 - 我现在看到了after_destroy。我需要更仔细地阅读。 – toddmetheny
请留下您的答案,因为它可能会帮助其他人。谢谢。 – Abram