ich*_*kov 12 activerecord ruby-on-rails ruby-on-rails-3 ruby-on-rails-4
我有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
Run Code Online (Sandbox Code Playgroud)
和
class CouponCode < ActiveRecord::Base
has_one :couponization, dependent: :destroy
has_one :deal, through: :couponization, source: :deal
Run Code Online (Sandbox Code Playgroud)
这是由多对多关系联系在一起的
class Couponization < ActiveRecord::Base
belongs_to :coupon_code
belongs_to :deal
end
Run Code Online (Sandbox Code Playgroud)
尽管我指定了dependent: :destroy选项,但当我删除交易时,优惠券代码不会被删除.但是,优惠券会成功删除.有没有办法删除对象销毁的关联嵌套记录?
Bal*_*ick 22
dependent: :destroy使用时:through请忽略这些选项(参见doc).你必须手动完成,例如before_destroy 回调.
class Deal
before_destroy :destroy_coupon_codes
private
def destroy_coupon_codes
self.coupon_codes.destroy_all
end
end
Run Code Online (Sandbox Code Playgroud)
我建议使用:after_destroy回调,所以如果销毁某个Deal实例由于任何原因失败,你最终不会删除它的所有CouponCodes.
这是一个:after_destroy应该有效的示例:
after_destroy { |record|
CouponCode.destroy(record.coupon_codes.pluck(:id))
}
Run Code Online (Sandbox Code Playgroud)
确保删除dependent: :destroy从has_many :couponizations在Deals模型中,因为所有couponizations现在将被破坏has_one :couponization, dependent: :destroy的CouponCode模型。
| 归档时间: |
|
| 查看次数: |
21854 次 |
| 最近记录: |