Skip to content

Commit

Permalink
Merge pull request #51787 from fatkodima/fix-touch_all-with-aliased-a…
Browse files Browse the repository at this point in the history
…ttribute-for-update

Fix `ActiveRecord::Relation#touch_all` with custom attribute aliased as attribute for update
  • Loading branch information
kamipo authored and rafaelfranca committed May 13, 2024
1 parent 0cbbb22 commit 66c8a46
Show file tree
Hide file tree
Showing 2 changed files with 16 additions and 1 deletion.
4 changes: 3 additions & 1 deletion activerecord/lib/active_record/timestamp.rb
Original file line number Diff line number Diff line change
Expand Up @@ -54,8 +54,10 @@ def initialize_dup(other) # :nodoc:

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

Expand Down
13 changes: 13 additions & 0 deletions activerecord/test/cases/relation/update_all_test.rb
Original file line number Diff line number Diff line change
Expand Up @@ -135,6 +135,19 @@ def test_touch_all_with_custom_timestamp
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
Expand Down

0 comments on commit 66c8a46

Please sign in to comment.