私は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
オプションを指定しましたが、取引を削除してもクーポンコードが削除されません。ただし、クーポン化は正常に削除されます。オブジェクト破棄で関連付けられたネストされたレコードを削除する方法はありますか?
:after_destroy
コールバックを使用することをお勧めします。そのため、何らかの理由でDeal
インスタンスの破棄が失敗した場合、そのCouponCodes
をすべて削除することにはなりません。
動作するはずの:after_destroy
の例を次に示します。
after_destroy { |record|
CouponCode.destroy(record.coupon_codes.pluck(:id))
}
すべてのDeals
がcouponizations
モデルのdependent: :destroy
によって破棄されるため、CouponCode
モデルのhas_many :couponizations
からhas_one :couponization, dependent: :destroy
を必ず削除してください。