aboutsummaryrefslogtreecommitdiffstats
path: root/activerecord/lib/active_record/associations/has_many_association.rb
diff options
context:
space:
mode:
authorJon Leighton <j@jonathanleighton.com>2011-01-30 19:07:08 +0000
committerJon Leighton <j@jonathanleighton.com>2011-02-07 23:35:05 +0000
commitd55406d2e991056b08f69eb68bcf9b17da807b6c (patch)
tree239edd0fef82a334309734b92639740a7e7c73db /activerecord/lib/active_record/associations/has_many_association.rb
parent5f1ea2a26b6e29f235e132d565b53f12e0234c66 (diff)
downloadrails-d55406d2e991056b08f69eb68bcf9b17da807b6c.tar.gz
rails-d55406d2e991056b08f69eb68bcf9b17da807b6c.tar.bz2
rails-d55406d2e991056b08f69eb68bcf9b17da807b6c.zip
Make record.association.destroy(*records) on habtm and hm:t only delete records in the join table. This is to make the destroy method more consistent across the different types of associations. For more details see the CHANGELOG entry.
Diffstat (limited to 'activerecord/lib/active_record/associations/has_many_association.rb')
-rw-r--r--activerecord/lib/active_record/associations/has_many_association.rb22
1 files changed, 11 insertions, 11 deletions
diff --git a/activerecord/lib/active_record/associations/has_many_association.rb b/activerecord/lib/active_record/associations/has_many_association.rb
index caefd14ee3..aff955dd5f 100644
--- a/activerecord/lib/active_record/associations/has_many_association.rb
+++ b/activerecord/lib/active_record/associations/has_many_association.rb
@@ -54,20 +54,20 @@ module ActiveRecord
end
# Deletes the records according to the <tt>:dependent</tt> option.
- def delete_records(records)
- case @reflection.options[:dependent]
- when :destroy
- records.each { |r| r.destroy }
- when :delete_all
- @reflection.klass.delete(records.map { |r| r.id })
- else
- updates = { @reflection.foreign_key => nil }
- conditions = { @reflection.association_primary_key => records.map { |r| r.id } }
+ def delete_records(records, method = @reflection.options[:dependent])
+ case method
+ when :destroy
+ records.each { |r| r.destroy }
+ when :delete_all
+ @reflection.klass.delete(records.map { |r| r.id })
+ else
+ updates = { @reflection.foreign_key => nil }
+ conditions = { @reflection.association_primary_key => records.map { |r| r.id } }
- scoped.where(conditions).update_all(updates)
+ scoped.where(conditions).update_all(updates)
end
- if has_cached_counter? && @reflection.options[:dependent] != :destroy
+ if has_cached_counter? && method != :destroy
@owner.class.update_counters(@owner.id, cached_counter_attribute_name => -records.size)
end
end