Merge pull request #51787 from fatkodima/fix-touch_all-with-aliased-attribute-for-update

Fix `ActiveRecord::Relation#touch_all` with custom attribute aliased as attribute for update
This commit is contained in:
Ryuta Kamizono 2024-05-14 03:55:58 +09:00 committed by GitHub
commit 36885949a9
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
2 changed files with 16 additions and 1 deletions

View File

@ -54,8 +54,10 @@ module ActiveRecord
module ClassMethods # :nodoc:
def touch_attributes_with_time(*names, time: nil)
names = names.map(&:to_s)
names = names.map { |name| attribute_aliases[name] || name }
attribute_names = timestamp_attributes_for_update_in_model
attribute_names |= names.map(&:to_s)
attribute_names |= names
attribute_names.index_with(time || current_time_from_proper_timezone)
end

View File

@ -135,6 +135,19 @@ class UpdateAllTest < ActiveRecord::TestCase
assert_not_equal previously_updated_at, developer.updated_at
end
def test_touch_all_with_aliased_for_update_timestamp
assert Developer.attribute_aliases.key?("updated_at")
developer = developers(:david)
previously_created_at = developer.created_at
previously_updated_at = developer.updated_at
Developer.where(name: "David").touch_all(:updated_at)
developer.reload
assert_equal previously_created_at, developer.created_at
assert_not_equal previously_updated_at, developer.updated_at
end
def test_touch_all_with_given_time
developer = developers(:david)
previously_created_at = developer.created_at