簡體   English   中英

Rails:刪除對象銷毀相關記錄

[英]Rails: Delete associated records on object destroy

我有2個模型

 class Deal < ActiveRecord::Base
   has_many :couponizations, dependent: :destroy     
   has_many :coupon_codes, through: :couponizations, source: :coupon_code, dependent: :destroy
   accepts_nested_attributes_for :coupon_codes, allow_destroy: true
 end

class CouponCode < ActiveRecord::Base
   has_one :couponization, dependent: :destroy
   has_one :deal, through: :couponization, source: :deal

由多對多關系鏈接

class Couponization < ActiveRecord::Base
   belongs_to :coupon_code
   belongs_to :deal
end

盡管我指定了dependent: :destroy選項,但當我刪除交易時,優惠券代碼不會被刪除。 但是優惠券刪除成功。 有沒有辦法在對象銷毀時刪除關聯的嵌套記錄?

:through一起使用時,選項dependent: :destroy被忽略(參見doc )。 您必須手動執行此操作,例如使用after_destroy 回調

 class Deal

   after_destroy :destroy_coupon_codes

   private

   def destroy_coupon_codes
     self.coupon_codes.destroy_all   
   end
 end

我建議使用:after_destroy回調,因此如果銷毀某些Deal實例因任何原因失敗,您最終不會刪除其所有CouponCodes

這是一個應該有效的:after_destroy示例:

after_destroy { |record|
  CouponCode.destroy(record.coupon_codes.pluck(:id))
}

確保從Deals模型中的has_many :couponizations中刪除dependent: :destroy ,因為所有couponizations現在都將被CouponCode模型中的has_one :couponization, dependent: :destroy

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM