我有供應商和職位。當提供者被銷燬時,我需要銷燬任何職位。但是,當我嘗試銷燬提供者時,我的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