diff options
author | Thomas Hollstegge <thomas.hollstegge@zweitag.de> | 2011-09-14 17:32:31 +0200 |
---|---|---|
committer | Thomas Hollstegge <thomas.hollstegge@zweitag.de> | 2012-11-17 16:45:23 +0100 |
commit | 70fa756ddb83684a05c840ff16e6b57cff5c5048 (patch) | |
tree | 1fc943f7ce52cde153754b96c299f590f51d559f /activerecord/lib | |
parent | ee9412839b8e4f30103519c20001a12582b824b8 (diff) | |
download | rails-70fa756ddb83684a05c840ff16e6b57cff5c5048.tar.gz rails-70fa756ddb83684a05c840ff16e6b57cff5c5048.tar.bz2 rails-70fa756ddb83684a05c840ff16e6b57cff5c5048.zip |
AR::Base.becomes should not change the STI type
If you want to change the STI type too, use AR::Base.becomes! instead
Diffstat (limited to 'activerecord/lib')
-rw-r--r-- | activerecord/lib/active_record/persistence.rb | 13 |
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 |