aboutsummaryrefslogtreecommitdiffstats
path: root/activerecord/lib/active_record/relation.rb
diff options
context:
space:
mode:
authorRafael Mendonça França <rafaelmfranca@gmail.com>2012-03-29 00:42:24 -0300
committerRafael Mendonça França <rafaelmfranca@gmail.com>2012-04-10 23:45:01 -0300
commit6f6c2909dcf32fca71ccc645a36469864b97894a (patch)
tree1e59e0ab4679cfedc33c428b490b9f8e8788623f /activerecord/lib/active_record/relation.rb
parent84adc214985ff7a2c02d120ca364b6f3771cb3b3 (diff)
downloadrails-6f6c2909dcf32fca71ccc645a36469864b97894a.tar.gz
rails-6f6c2909dcf32fca71ccc645a36469864b97894a.tar.bz2
rails-6f6c2909dcf32fca71ccc645a36469864b97894a.zip
Fix delete_all when chained with joins.
Closes #5202 and #919
Diffstat (limited to 'activerecord/lib/active_record/relation.rb')
-rw-r--r--activerecord/lib/active_record/relation.rb12
1 files changed, 10 insertions, 2 deletions
diff --git a/activerecord/lib/active_record/relation.rb b/activerecord/lib/active_record/relation.rb
index b125449127..b007b8c168 100644
--- a/activerecord/lib/active_record/relation.rb
+++ b/activerecord/lib/active_record/relation.rb
@@ -400,8 +400,16 @@ module ActiveRecord
if conditions
where(conditions).delete_all
else
- statement = arel.compile_delete
- affected = @klass.connection.delete(statement, 'SQL', bind_values)
+ stmt = Arel::DeleteManager.new(arel.engine)
+ stmt.from(table)
+
+ if joins_values.any?
+ @klass.connection.join_to_delete(stmt, arel, table[primary_key])
+ else
+ stmt.wheres = arel.constraints
+ end
+
+ affected = @klass.connection.delete(stmt, 'SQL', bind_values)
reset
affected