I am trying to prevent a record from being destroyed if there are children.
class Submission < ActiveRecord::Base
has_many :quotations, :dependent => :destroy
before_destroy :check_for_payments
def quoted?
quotations.any?
end
def has_payments?
true if quotations.detect {|q| q.payment}
end
private
def check_for_payments
if quoted? && has_payments?
errors[:base] << "cannot delete submission that has already been paid"
false
end
end
end
class Quotation < ActiveRecord::Base
#associations
belongs_to :submission
has_one :payment_notification
has_one :payment
before_destroy :check_for_payments
private
def check_for_payments
if payment_notification || payment
errors[:base] << "cannot delete quotation while payment exist"
return false
end
end
end
When I test this code the before_destroy :check_for_payments prevents the Quotation record from being deleted.
However the :check_for_payments in the Submission before_destroy callback does not stop the Submission from being deleted.
How can I stop the Submission with payments from being destroyed?