@@ -34,6 +34,7 @@ def belongs_to(name, scope = nil, **options)
3434 mapping = self . class . send ( "#{ foreign_type } _mapping" )
3535 enum = mapping . key ( klass . to_s )
3636 if klass . kind_of? ( Class ) && klass <= ActiveRecord ::Base
37+ enum ||= mapping . key ( klass . polymorphic_name ) if klass . respond_to? ( :polymorphic_name )
3738 enum ||= mapping . key ( klass . sti_name )
3839 enum ||= mapping . key ( klass . base_class . to_s )
3940 enum ||= mapping . key ( klass . base_class . sti_name )
@@ -45,6 +46,7 @@ def belongs_to(name, scope = nil, **options)
4546 define_method "#{ name } =" do |record |
4647 super ( record )
4748 send ( "#{ foreign_type } =" , record . class )
49+ association ( name ) . loaded!
4850 end
4951 end
5052
@@ -69,14 +71,15 @@ def remove_type_and_establish_mapping(name, options, scope)
6971 if options [ :as ] && ( polymorphic_type_mapping || integer_type )
7072 poly_type = options . delete ( :as )
7173 polymorphic_type_mapping ||= PolymorphicIntegerType ::Mapping [ poly_type ]
72- if polymorphic_type_mapping == nil
74+ if polymorphic_type_mapping . nil?
7375 raise "Polymorphic type mapping missing for #{ poly_type . inspect } "
7476 end
7577
76- klass_mapping = ( polymorphic_type_mapping || { } ) . key ( sti_name )
78+ klass_mapping = polymorphic_type_mapping . key ( polymorphic_name ) if respond_to? ( :polymorphic_name )
79+ klass_mapping ||= polymorphic_type_mapping . key ( sti_name )
7780
78- if klass_mapping == nil
79- raise "Class not found for #{ sti_name . inspect } in polymorphic type mapping: #{ polymorphic_type_mapping } "
81+ if klass_mapping . nil?
82+ raise "Class not found for #{ inspect } in polymorphic type mapping: #{ polymorphic_type_mapping } "
8083 end
8184
8285 options [ :foreign_key ] ||= "#{ poly_type } _id"
0 commit comments