diff options
author | Jon Leighton <j@jonathanleighton.com> | 2011-08-09 00:12:53 +0100 |
---|---|---|
committer | Jon Leighton <j@jonathanleighton.com> | 2011-08-15 23:10:15 +0100 |
commit | 128d006242dae07edc65ad03e0e045adac0bbbf3 (patch) | |
tree | b06e9eb308ba00e12bae7fdaf8cd277ead5b352f /activerecord/lib/active_record/relation.rb | |
parent | 9482554f31f3ac7f941e6239890c60fcc01975e1 (diff) | |
download | rails-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.rb | 13 |
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 |