diff options
author | Rafael França <rafaelmfranca@gmail.com> | 2018-11-29 15:31:24 -0500 |
---|---|---|
committer | GitHub <noreply@github.com> | 2018-11-29 15:31:24 -0500 |
commit | 5b75408e3226b43fab66558d173df7e97efbc240 (patch) | |
tree | 207983063d7581829ae42f59574f662737076aa7 /activerecord | |
parent | c8e4d5a1e3be2290bc6007987e40312e19480474 (diff) | |
parent | 72e63c71bb3f73870e280964def25b7578818b1b (diff) | |
download | rails-5b75408e3226b43fab66558d173df7e97efbc240.tar.gz rails-5b75408e3226b43fab66558d173df7e97efbc240.tar.bz2 rails-5b75408e3226b43fab66558d173df7e97efbc240.zip |
Merge pull request #34569 from gmcgibbon/allow_attribute_aliases_in_update
Allow aliased attributes in update
Diffstat (limited to 'activerecord')
-rw-r--r-- | activerecord/CHANGELOG.md | 4 | ||||
-rw-r--r-- | activerecord/lib/active_record/attribute_methods/dirty.rb | 10 | ||||
-rw-r--r-- | activerecord/test/cases/attribute_methods_test.rb | 6 |
3 files changed, 17 insertions, 3 deletions
diff --git a/activerecord/CHANGELOG.md b/activerecord/CHANGELOG.md index d32c6c3c5d..5b07d63684 100644 --- a/activerecord/CHANGELOG.md +++ b/activerecord/CHANGELOG.md @@ -1,3 +1,7 @@ +* Allow aliased attributes to be used in `#update_columns` and `#update`. + + *Gannon McGibbon* + * Allow spaces in postgres table names. Fixes issue where "user post" is misinterpreted as "\"user\".\"post\"" when quoting table names with the postgres adapter. diff --git a/activerecord/lib/active_record/attribute_methods/dirty.rb b/activerecord/lib/active_record/attribute_methods/dirty.rb index ebc2252c50..45e4b8adfa 100644 --- a/activerecord/lib/active_record/attribute_methods/dirty.rb +++ b/activerecord/lib/active_record/attribute_methods/dirty.rb @@ -158,9 +158,13 @@ module ActiveRecord end private - def write_attribute_without_type_cast(attr_name, _) - result = super - clear_attribute_change(attr_name) + def write_attribute_without_type_cast(attr_name, value) + name = attr_name.to_s + if self.class.attribute_alias?(name) + name = self.class.attribute_alias(name) + end + result = super(name, value) + clear_attribute_change(name) result end diff --git a/activerecord/test/cases/attribute_methods_test.rb b/activerecord/test/cases/attribute_methods_test.rb index 12a4027a4e..d341dd0083 100644 --- a/activerecord/test/cases/attribute_methods_test.rb +++ b/activerecord/test/cases/attribute_methods_test.rb @@ -323,6 +323,12 @@ class AttributeMethodsTest < ActiveRecord::TestCase assert_raises(ActiveModel::UnknownAttributeError) { topic.update(no_column_exists: "Hello!") } end + test "write_attribute allows writing to aliased attributes" do + topic = Topic.first + assert_nothing_raised { topic.update_columns(heading: "Hello!") } + assert_nothing_raised { topic.update(heading: "Hello!") } + end + test "read_attribute" do topic = Topic.new topic.title = "Don't change the topic" |