diff options
author | Ryuta Kamizono <kamipo@gmail.com> | 2019-05-21 23:56:22 +0900 |
---|---|---|
committer | GitHub <noreply@github.com> | 2019-05-21 23:56:22 +0900 |
commit | 439145c9a8bc811a98946a620afc69469ea82e84 (patch) | |
tree | 801e0ffb599536daa8bf7f331a2ef9994d54159c /activerecord/lib/active_record/table_metadata.rb | |
parent | 0810c076de0d9b7879ee240bb08d31fb7c2f5ac9 (diff) | |
parent | 82a54be0c6a19336008e18f52bc76791adc3bd67 (diff) | |
download | rails-439145c9a8bc811a98946a620afc69469ea82e84.tar.gz rails-439145c9a8bc811a98946a620afc69469ea82e84.tar.bz2 rails-439145c9a8bc811a98946a620afc69469ea82e84.zip |
Merge pull request #36314 from kamipo/fallback_type_casting
Fall back to type casting from the connection adapter
Diffstat (limited to 'activerecord/lib/active_record/table_metadata.rb')
-rw-r--r-- | activerecord/lib/active_record/table_metadata.rb | 16 |
1 files changed, 6 insertions, 10 deletions
diff --git a/activerecord/lib/active_record/table_metadata.rb b/activerecord/lib/active_record/table_metadata.rb index 073866b894..9a1176db6a 100644 --- a/activerecord/lib/active_record/table_metadata.rb +++ b/activerecord/lib/active_record/table_metadata.rb @@ -4,8 +4,9 @@ module ActiveRecord class TableMetadata # :nodoc: delegate :foreign_type, :foreign_key, :join_primary_key, :join_foreign_key, to: :association, prefix: true - def initialize(klass, arel_table, association = nil) + def initialize(klass, arel_table, association = nil, types = klass) @klass = klass + @types = types @arel_table = arel_table @association = association end @@ -29,11 +30,7 @@ module ActiveRecord end def type(column_name) - if klass - klass.type_for_attribute(column_name) - else - Type.default_value - end + types.type_for_attribute(column_name) end def has_column?(column_name) @@ -52,13 +49,12 @@ module ActiveRecord elsif association && !association.polymorphic? association_klass = association.klass arel_table = association_klass.arel_table.alias(table_name) + TableMetadata.new(association_klass, arel_table, association) else type_caster = TypeCaster::Connection.new(klass, table_name) - association_klass = nil arel_table = Arel::Table.new(table_name, type_caster: type_caster) + TableMetadata.new(nil, arel_table, association, type_caster) end - - TableMetadata.new(association_klass, arel_table, association) end def polymorphic_association? @@ -74,6 +70,6 @@ module ActiveRecord end private - attr_reader :klass, :arel_table, :association + attr_reader :klass, :types, :arel_table, :association end end |