lib/models/mark.rb in markable-0.1.0 vs lib/models/mark.rb in markable-0.1.1

- old
+ new

@@ -2,7 +2,24 @@ class Mark < ActiveRecord::Base belongs_to :markable, :polymorphic => true belongs_to :marker, :polymorphic => true attr_accessible :markable_id, :markable_type, :marker_id, :marker_type, :mark + + # Delete orphan marks + # + # Marks are deleted when marker or markable record is destroyed. However, in some circumstances, some marks + # may reference non existing records (for instance if the record has been deleted - not destroyed). + # + # Note: this method is not efficient but this should not be a problem as it should be used as a maintenance + # operation only. + # + # @return [Number] Deleted orphan marks count + def self.delete_orphans + Markable::Mark.all.delete_if { |mark| + mark.marker && mark.markable + }.each { |orphan| + Markable::Mark.delete_all orphan.attributes + }.count + end end end