aboutsummaryrefslogtreecommitdiffstats
path: root/activerecord/lib/active_record/persistence.rb
diff options
context:
space:
mode:
authorRafael Mendonça França <rafaelmfranca@gmail.com>2012-11-18 23:25:13 -0200
committerRafael Mendonça França <rafaelmfranca@gmail.com>2012-11-18 23:25:13 -0200
commit0cc9c1255d8bc5a2f7d4abb8553e9eefabf3deac (patch)
tree5283bc0dd4515dc35646ae691adf6c9733756b9a /activerecord/lib/active_record/persistence.rb
parentf460835dd5ebcede6f02e0459a7e6f8271b9047c (diff)
parent70fa756ddb83684a05c840ff16e6b57cff5c5048 (diff)
downloadrails-0cc9c1255d8bc5a2f7d4abb8553e9eefabf3deac.tar.gz
rails-0cc9c1255d8bc5a2f7d4abb8553e9eefabf3deac.tar.bz2
rails-0cc9c1255d8bc5a2f7d4abb8553e9eefabf3deac.zip
Merge pull request #3023 from Tho85/preserve_sti_type
AR::Base.becomes should not change the STI type Conflicts: activerecord/CHANGELOG.md
Diffstat (limited to 'activerecord/lib/active_record/persistence.rb')
-rw-r--r--activerecord/lib/active_record/persistence.rb13
1 files changed, 12 insertions, 1 deletions
diff --git a/activerecord/lib/active_record/persistence.rb b/activerecord/lib/active_record/persistence.rb
index 8e749772a1..45f5406cc3 100644
--- a/activerecord/lib/active_record/persistence.rb
+++ b/activerecord/lib/active_record/persistence.rb
@@ -155,7 +155,18 @@ module ActiveRecord
became.instance_variable_set("@new_record", new_record?)
became.instance_variable_set("@destroyed", destroyed?)
became.instance_variable_set("@errors", errors)
- became.public_send("#{klass.inheritance_column}=", klass.name) unless self.class.descends_from_active_record?
+ became
+ end
+
+ # Wrapper around +becomes+ that also changes the instance's sti column value.
+ # This is especially useful if you want to persist the changed class in your
+ # database.
+ #
+ # Note: The old instance's sti column value will be changed too, as both objects
+ # share the same set of attributes.
+ def becomes!(klass)
+ became = becomes(klass)
+ became.public_send("#{klass.inheritance_column}=", klass.sti_name) unless self.class.descends_from_active_record?
became
end