diff options
author | Kuldeep Aggarwal <kd.engineer@yahoo.co.in> | 2015-12-02 16:08:19 +0530 |
---|---|---|
committer | Kuldeep Aggarwal <kd.engineer@yahoo.co.in> | 2015-12-02 16:11:24 +0530 |
commit | 6b18bdd00ce1e8eb4a5a30f0f6152e47da9bec42 (patch) | |
tree | 05b29c3da5f57315b5d39c1f58c1c5d200a7abd9 /activerecord/lib | |
parent | 203db6b8c11532eb99e2770dbba326579532aa37 (diff) | |
download | rails-6b18bdd00ce1e8eb4a5a30f0f6152e47da9bec42.tar.gz rails-6b18bdd00ce1e8eb4a5a30f0f6152e47da9bec42.tar.bz2 rails-6b18bdd00ce1e8eb4a5a30f0f6152e47da9bec42.zip |
STI cast new instances to `default type` on initialize.
fixes #17121
Diffstat (limited to 'activerecord/lib')
-rw-r--r-- | activerecord/lib/active_record/inheritance.rb | 12 |
1 files changed, 12 insertions, 0 deletions
diff --git a/activerecord/lib/active_record/inheritance.rb b/activerecord/lib/active_record/inheritance.rb index 8b719e0bcb..ed95b30f80 100644 --- a/activerecord/lib/active_record/inheritance.rb +++ b/activerecord/lib/active_record/inheritance.rb @@ -55,6 +55,8 @@ module ActiveRecord subclass = subclass_from_attributes(attrs) end + subclass ||= subclass_from_defaults + if subclass && subclass != self subclass.new(*args, &block) else @@ -201,6 +203,16 @@ module ActiveRecord attribute_names.include?(inheritance_column) && (attrs.is_a?(Hash) || attrs.respond_to?(:permitted?)) end + def subclass_from_defaults? + attribute_names.include?(inheritance_column) && columns_hash[inheritance_column].try(:default) + end + + def subclass_from_defaults + if subclass_from_defaults? + find_sti_class(columns_hash[inheritance_column].default) + end + end + def subclass_from_attributes(attrs) attrs = attrs.to_h if attrs.respond_to?(:permitted?) subclass_name = attrs.with_indifferent_access[inheritance_column] |