mirror of
https://github.com/rails/rails.git
synced 2022-11-09 12:12:34 -05:00
fix bug in becomes! when changing from base to subclass. Closes #13272.
This commit is contained in:
parent
ee4b5f1b8a
commit
e95031f55d
3 changed files with 22 additions and 1 deletions
|
@ -1,3 +1,9 @@
|
|||
* Fix bug in `becomes!` when changing from the base model to a STI sub-class.
|
||||
|
||||
Fixes #13272.
|
||||
|
||||
*the-web-dev*, *Yves Senn*
|
||||
|
||||
* Currently Active Record can be configured via the environment variable
|
||||
`DATABASE_URL` or by manually injecting a hash of values which is what Rails does,
|
||||
reading in `database.yml` and setting Active Record appropriately. Active Record
|
||||
|
|
|
@ -196,7 +196,11 @@ module ActiveRecord
|
|||
# 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?
|
||||
sti_type = nil
|
||||
if !klass.descends_from_active_record?
|
||||
sti_type = klass.sti_name
|
||||
end
|
||||
became.public_send("#{klass.inheritance_column}=", sti_type)
|
||||
became
|
||||
end
|
||||
|
||||
|
|
|
@ -128,6 +128,17 @@ class InheritanceTest < ActiveRecord::TestCase
|
|||
assert_kind_of Cabbage, cabbage
|
||||
end
|
||||
|
||||
def test_alt_becomes_bang_resets_inheritance_type_column
|
||||
vegetable = Vegetable.create!(name: "Red Pepper")
|
||||
assert_nil vegetable.custom_type
|
||||
|
||||
cabbage = vegetable.becomes!(Cabbage)
|
||||
assert_equal "Cabbage", cabbage.custom_type
|
||||
|
||||
vegetable = cabbage.becomes!(Vegetable)
|
||||
assert_nil cabbage.custom_type
|
||||
end
|
||||
|
||||
def test_inheritance_find_all
|
||||
companies = Company.all.merge!(:order => 'id').to_a
|
||||
assert_kind_of Firm, companies[0], "37signals should be a firm"
|
||||
|
|
Loading…
Reference in a new issue