diff options
author | Ryuta Kamizono <kamipo@gmail.com> | 2019-01-02 23:42:16 +0900 |
---|---|---|
committer | GitHub <noreply@github.com> | 2019-01-02 23:42:16 +0900 |
commit | 260b273106168ba7a122c76c79a3b7f4a3209559 (patch) | |
tree | aef5d7e81524e15b0f33578b3c6dc654a5dacbe1 /activerecord | |
parent | b3aa86ca7ed28f2e9ab858fe1689010d39426018 (diff) | |
parent | 4c05434973fde5f6dcc7dd58d360be13e1f02a80 (diff) | |
download | rails-260b273106168ba7a122c76c79a3b7f4a3209559.tar.gz rails-260b273106168ba7a122c76c79a3b7f4a3209559.tar.bz2 rails-260b273106168ba7a122c76c79a3b7f4a3209559.zip |
Merge pull request #34836 from kamipo/class_level_update_without_ids
Restore an ability that class level `update` without giving ids
Diffstat (limited to 'activerecord')
-rw-r--r-- | activerecord/lib/active_record/persistence.rb | 4 | ||||
-rw-r--r-- | activerecord/test/cases/persistence_test.rb | 14 |
2 files changed, 17 insertions, 1 deletions
diff --git a/activerecord/lib/active_record/persistence.rb b/activerecord/lib/active_record/persistence.rb index 7bf8d568df..c2b60610ce 100644 --- a/activerecord/lib/active_record/persistence.rb +++ b/activerecord/lib/active_record/persistence.rb @@ -96,11 +96,13 @@ module ActiveRecord # When running callbacks is not needed for each record update, # it is preferred to use {update_all}[rdoc-ref:Relation#update_all] # for updating all records in a single query. - def update(id, attributes) + def update(id = :all, attributes) if id.is_a?(Array) id.map { |one_id| find(one_id) }.each_with_index { |object, idx| object.update(attributes[idx]) } + elsif id == :all + all.each { |record| record.update(attributes) } else if ActiveRecord::Base === id raise ArgumentError, diff --git a/activerecord/test/cases/persistence_test.rb b/activerecord/test/cases/persistence_test.rb index 4830ff2b5f..d5057ad381 100644 --- a/activerecord/test/cases/persistence_test.rb +++ b/activerecord/test/cases/persistence_test.rb @@ -53,6 +53,20 @@ class PersistenceTest < ActiveRecord::TestCase assert_not_equal "2 updated", Topic.find(2).content end + def test_class_level_update_without_ids + topics = Topic.all + assert_equal 5, topics.length + topics.each do |topic| + assert_not_equal "updated", topic.content + end + + updated = Topic.update(content: "updated") + assert_equal 5, updated.length + updated.each do |topic| + assert_equal "updated", topic.content + end + end + def test_class_level_update_is_affected_by_scoping topic_data = { 1 => { "content" => "1 updated" }, 2 => { "content" => "2 updated" } } |