mirror of
https://github.com/rails/rails.git
synced 2022-11-09 12:12:34 -05:00
Just delegate update
with ids on a relation to klass.update
This restores an ability that `update` with ids on a relation which is described at https://github.com/rails/rails/issues/33470#issuecomment-411203013. I personally think that the `update` with two arguments on a relation is not a designed feature, since that is totally not using a relation state, and also is not documented. But removing any feature should not be suddenly happened in a stable version even if that is not documented.
This commit is contained in:
parent
8f2caec401
commit
5c656889a6
2 changed files with 24 additions and 2 deletions
|
@ -375,8 +375,12 @@ module ActiveRecord
|
||||||
@klass.connection.update stmt, "#{@klass} Update All"
|
@klass.connection.update stmt, "#{@klass} Update All"
|
||||||
end
|
end
|
||||||
|
|
||||||
def update(attributes) # :nodoc:
|
def update(id = :all, attributes) # :nodoc:
|
||||||
each { |record| record.update(attributes) }
|
if id == :all
|
||||||
|
each { |record| record.update(attributes) }
|
||||||
|
else
|
||||||
|
klass.update(id, attributes)
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
def update_counters(counters) # :nodoc:
|
def update_counters(counters) # :nodoc:
|
||||||
|
|
|
@ -1587,6 +1587,24 @@ class RelationTest < ActiveRecord::TestCase
|
||||||
assert_equal "David", topic2.reload.author_name
|
assert_equal "David", topic2.reload.author_name
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def test_update_with_ids_on_relation
|
||||||
|
topic1 = TopicWithCallbacks.create!(title: "arel", author_name: nil)
|
||||||
|
topic2 = TopicWithCallbacks.create!(title: "activerecord", author_name: nil)
|
||||||
|
topics = TopicWithCallbacks.none
|
||||||
|
topics.update(
|
||||||
|
[topic1.id, topic2.id],
|
||||||
|
[{ title: "adequaterecord" }, { title: "adequaterecord" }]
|
||||||
|
)
|
||||||
|
|
||||||
|
assert_equal TopicWithCallbacks.count, TopicWithCallbacks.topic_count
|
||||||
|
|
||||||
|
assert_equal "adequaterecord", topic1.reload.title
|
||||||
|
assert_equal "adequaterecord", topic2.reload.title
|
||||||
|
# Testing that the before_update callbacks have run
|
||||||
|
assert_equal "David", topic1.reload.author_name
|
||||||
|
assert_equal "David", topic2.reload.author_name
|
||||||
|
end
|
||||||
|
|
||||||
def test_update_on_relation_passing_active_record_object_is_not_permitted
|
def test_update_on_relation_passing_active_record_object_is_not_permitted
|
||||||
topic = Topic.create!(title: "Foo", author_name: nil)
|
topic = Topic.create!(title: "Foo", author_name: nil)
|
||||||
assert_raises(ArgumentError) do
|
assert_raises(ArgumentError) do
|
||||||
|
|
Loading…
Reference in a new issue