diff options
author | Rafael Mendonça França <rafaelmfranca@gmail.com> | 2012-03-29 00:42:24 -0300 |
---|---|---|
committer | Rafael Mendonça França <rafaelmfranca@gmail.com> | 2012-04-10 23:45:01 -0300 |
commit | 6f6c2909dcf32fca71ccc645a36469864b97894a (patch) | |
tree | 1e59e0ab4679cfedc33c428b490b9f8e8788623f /activerecord/lib/active_record/relation.rb | |
parent | 84adc214985ff7a2c02d120ca364b6f3771cb3b3 (diff) | |
download | rails-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.rb | 12 |
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 |