33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
|
# File 'lib/recurse-delete.rb', line 33
def delete_recursively(parent_class, parent_ids)
parent_class.delete_all(:id => parent_ids)
assocs = parent_class.reflect_on_all_associations.select do |assoc|
[:destroy, :destroy_all, :delete, :delete_all].include? assoc.options[:dependent]
end
assocs.each do |assoc|
dependent_class = assoc.name.to_s.classify.constantize
foreign_key = (assoc.options[:foreign_key] or parent_class.to_s.foreign_key)
dependent_ids = dependent_class.where(foreign_key => parent_ids).value_of(:id)
delete_recursively(dependent_class, dependent_ids)
end
end
|