我有這樣的情況:before_destroy爲模型,破壞相關記錄
class Shop < ActiveRecord::Base
has_many :services, dependent: :destroy
end
class Service < ActiveRecord::Base
has_many :model_weeks, dependent: :destroy
end
class ModelWeek < ActiveRecord::Base
before_destroy :prevent_destroy, if: :default?
private
def prevent_destroy
false
end
end
當我試圖摧毀一家店,我得到ActiveRecord::RecordNotDestroyed: Failed to destroy the record
,因爲它首先開始銷燬相關的記錄,它就會被阻止在ModelWeek中回調。
只有當我能夠抓住它時,我才能很容易地在銷燬店鋪時取消ModelWeek的默認設置。 Shop
模型中的before_destroy
在上述引發異常之前未觸發。
那麼,有沒有一種方法可以在Shop模型中捕捉到這一點,或者如果沒有,是否有可能在ModelWeek中「知道」銷燬是由父級觸發的?我調查解析來電,但它沒有提供任何有用的東西,它將是混亂無論如何...
這是如何使它不同?我需要防止銷燬默認的ModelWeek,除非父級(服務)請求銷燬。我怎麼知道在ModelWeek的銷燬方法中? – bosskovic
如果作爲您的描述,我們刪除依賴項,因爲它不工作,它應該工作。在控制器或服務對象中刪除,我想! –
就是這樣,我不想手動去做,我希望它能夠通過rails來管理,並且我發現了其中的兩個解決方案。請看看我發佈的答案。你給了我第一個想法,但最後我跟第二個一起去了,因爲它更乾淨。 – bosskovic