Project

General

Profile

Download (999 Bytes) Statistics
| Branch: | Tag: | Revision:
# DestroyFlag adds a flag and a corresponding reader method to any active record
# during deletion. The flag is set to true using before_destroy callback so during
# complicated association deletions you can check whether the deletion includes
# the object, e.g. we normally prevent deletion of primary interface in it's
# before filter but we have to allow it when we delete associated host.
#
# class Host
# include DestroyFlag
# end
#
# class Nic
# belongs_to :host
# before_destroy :keep_primary, :if => Proc.new { |nic| nic.primary? }
#
# def keep_primary
# unless host.being_destroyed? # Here we use being_destroyed? flag
# raise 'we can not delete primary'
# end
# end
# end
#
module DestroyFlag
extend ActiveSupport::Concern

def being_destroyed?
@_active_record_being_destroyed
end

included do
attr_accessor :_active_record_being_destroyed
before_destroy { |record| record._active_record_being_destroyed = true }
end
end
(10-10/48)