diff options
author | Rafael Mendonça França <rafaelmfranca@gmail.com> | 2015-02-20 15:01:28 -0200 |
---|---|---|
committer | Rafael Mendonça França <rafaelmfranca@gmail.com> | 2015-02-20 15:01:28 -0200 |
commit | 0f2261f2d10afade350378779104cdf0fc09605c (patch) | |
tree | e81d98c2622f215019e2609c3ee0bded1e6f1245 /activerecord | |
parent | 063b058e28de226272bff64508f6a68d471fa398 (diff) | |
parent | 5f6370a81bd013b801f3e4842ffd466d756d127d (diff) | |
download | rails-0f2261f2d10afade350378779104cdf0fc09605c.tar.gz rails-0f2261f2d10afade350378779104cdf0fc09605c.tar.bz2 rails-0f2261f2d10afade350378779104cdf0fc09605c.zip |
Merge pull request #17139 from mfazekas/fix_becomes_changed_attributes
Always reset changed attributes in becomes
Diffstat (limited to 'activerecord')
-rw-r--r-- | activerecord/CHANGELOG.md | 6 | ||||
-rw-r--r-- | activerecord/lib/active_record/persistence.rb | 3 | ||||
-rw-r--r-- | activerecord/test/cases/inheritance_test.rb | 6 |
3 files changed, 14 insertions, 1 deletions
diff --git a/activerecord/CHANGELOG.md b/activerecord/CHANGELOG.md index b852391da2..52aaa2371d 100644 --- a/activerecord/CHANGELOG.md +++ b/activerecord/CHANGELOG.md @@ -1,3 +1,9 @@ +* Fixed ActiveRecord::Relation#becomes! and changed_attributes issues for type column + + Fixes #17139. + + *Miklos Fazekas* + * Format the time string according to the precision of the time column. *Ryuta Kamizono* diff --git a/activerecord/lib/active_record/persistence.rb b/activerecord/lib/active_record/persistence.rb index 3ca58523d7..35d1085f5a 100644 --- a/activerecord/lib/active_record/persistence.rb +++ b/activerecord/lib/active_record/persistence.rb @@ -208,7 +208,8 @@ module ActiveRecord def becomes(klass) became = klass.new became.instance_variable_set("@attributes", @attributes) - became.instance_variable_set("@changed_attributes", @changed_attributes) if defined?(@changed_attributes) + changed_attributes = @changed_attributes if defined?(@changed_attributes) + became.instance_variable_set("@changed_attributes", changed_attributes || {}) became.instance_variable_set("@new_record", new_record?) became.instance_variable_set("@destroyed", destroyed?) became.instance_variable_set("@errors", errors) diff --git a/activerecord/test/cases/inheritance_test.rb b/activerecord/test/cases/inheritance_test.rb index 6b18bfe84f..3268555cb8 100644 --- a/activerecord/test/cases/inheritance_test.rb +++ b/activerecord/test/cases/inheritance_test.rb @@ -121,6 +121,12 @@ class InheritanceTest < ActiveRecord::TestCase assert_kind_of Cabbage, cabbage end + def test_becomes_and_change_tracking_for_inheritance_columns + cucumber = Vegetable.find(1) + cabbage = cucumber.becomes!(Cabbage) + assert_equal ['Cucumber', 'Cabbage'], cabbage.custom_type_change + end + def test_alt_becomes_bang_resets_inheritance_type_column vegetable = Vegetable.create!(name: "Red Pepper") assert_nil vegetable.custom_type |