aboutsummaryrefslogtreecommitdiffstats
path: root/activerecord/lib/active_record/relation.rb
diff options
context:
space:
mode:
authorJon Leighton <j@jonathanleighton.com>2011-08-09 00:12:53 +0100
committerJon Leighton <j@jonathanleighton.com>2011-08-15 23:10:15 +0100
commit128d006242dae07edc65ad03e0e045adac0bbbf3 (patch)
treeb06e9eb308ba00e12bae7fdaf8cd277ead5b352f /activerecord/lib/active_record/relation.rb
parent9482554f31f3ac7f941e6239890c60fcc01975e1 (diff)
downloadrails-128d006242dae07edc65ad03e0e045adac0bbbf3.tar.gz
rails-128d006242dae07edc65ad03e0e045adac0bbbf3.tar.bz2
rails-128d006242dae07edc65ad03e0e045adac0bbbf3.zip
Support updates with joins. Fixes #522.
Diffstat (limited to 'activerecord/lib/active_record/relation.rb')
-rw-r--r--activerecord/lib/active_record/relation.rb13
1 files changed, 9 insertions, 4 deletions
diff --git a/activerecord/lib/active_record/relation.rb b/activerecord/lib/active_record/relation.rb
index 7e59eb4584..565ece1930 100644
--- a/activerecord/lib/active_record/relation.rb
+++ b/activerecord/lib/active_record/relation.rb
@@ -217,13 +217,18 @@ module ActiveRecord
where(conditions).apply_finder_options(options.slice(:limit, :order)).update_all(updates)
else
stmt = arel.compile_update(Arel.sql(@klass.send(:sanitize_sql_for_assignment, updates)))
+ stmt.key = table[primary_key]
- if limit = arel.limit
- stmt.take limit
+ if joins_values.any?
+ @klass.connection.join_to_update(stmt, arel)
+ else
+ if limit = arel.limit
+ stmt.take limit
+ end
+
+ stmt.order(*arel.orders)
end
- stmt.order(*arel.orders)
- stmt.key = table[primary_key]
@klass.connection.update stmt, 'SQL', bind_values
end
end