1
0
Fork 0
mirror of https://github.com/rails/rails.git synced 2022-11-09 12:12:34 -05:00

don't rely on the columns hash to get defaults. follow-up to #17169.

This will also get the defaults from attribute definitions like:

     attribute :type, :string, default: "SomethingElse"
This commit is contained in:
Yves Senn 2015-12-02 17:02:11 +01:00
parent 4294a7eebf
commit 72b92e8172
2 changed files with 25 additions and 7 deletions

View file

@ -52,7 +52,7 @@ module ActiveRecord
attrs = args.first
if has_attribute?(inheritance_column)
subclass = subclass_from_attributes(attrs) || subclass_from_defaults
subclass = subclass_from_attributes(attrs) || subclass_from_attributes(column_defaults)
end
if subclass && subclass != self
@ -207,12 +207,6 @@ module ActiveRecord
end
end
end
def subclass_from_defaults
if default = columns_hash[inheritance_column].default
find_sti_class(default)
end
end
end
def initialize_dup(other)

View file

@ -500,3 +500,27 @@ class InheritanceComputeTypeTest < ActiveRecord::TestCase
Company.reset_column_information
end
end
class InheritanceAttributeTest < ActiveRecord::TestCase
class Company < ActiveRecord::Base
self.table_name = 'companies'
attribute :type, :string, default: "InheritanceAttributeTest::Startup"
end
class Startup < Company
end
class Empire < Company
end
def test_inheritance_new_with_subclass_as_default
startup = Company.new # without arguments
assert_equal 'InheritanceAttributeTest::Startup', startup.type
assert_instance_of Startup, startup
empire = Company.new(type: 'InheritanceAttributeTest::Empire') # without arguments
assert_equal 'InheritanceAttributeTest::Empire', empire.type
assert_instance_of Empire, empire
end
end