Rails 6 itibariyle işlerin durumu:
Bu çalışıyor:
before_destroy :ensure_something, prepend: true do
throw(:abort) if errors.present?
end
private
def ensure_something
errors.add(:field, "This isn't a good idea..") if something_bad
end
validate :validate_test, on: :destroy
çalışmıyor: https://github.com/rails/rails/issues/32376
Yürütmeyi throw(:abort)
iptal etmek için Rails 5 gerektiğinden: https://makandracards.com/makandra/20301-cancelling-the-activerecord-callback-chain
prepend: true
dependent: :destroy
doğrulamalar yürütülmeden önce çalışmaması için gereklidir : https://github.com/rails/rails/issues/3458
Bunu diğer cevaplardan ve yorumlardan birlikte yakalayabilirsiniz, ancak hiçbirini eksiksiz bulmadım.
Bir yan not olarak, birçoğu, has_many
öksüz kayıtlar oluşturacaksa hiçbir kaydı silmemek için bir örnek olarak bir ilişki kullandı . Bu çok daha kolay çözülebilir:
has_many :entities, dependent: :restrict_with_error