diff options
Diffstat (limited to 'activerecord/lib')
-rw-r--r-- | activerecord/lib/active_record/associations/preloader/association.rb | 22 |
1 files changed, 14 insertions, 8 deletions
diff --git a/activerecord/lib/active_record/associations/preloader/association.rb b/activerecord/lib/active_record/associations/preloader/association.rb index 5a172a417d..63773bd5e1 100644 --- a/activerecord/lib/active_record/associations/preloader/association.rb +++ b/activerecord/lib/active_record/associations/preloader/association.rb @@ -57,13 +57,15 @@ module ActiveRecord end def owners_by_key - @owners_by_key ||= owners.group_by do |owner| - if owner_key_type == association_key_type - owner[owner_key_name] - else - owner[owner_key_name].to_s - end - end + @owners_by_key ||= if key_conversion_required? + owners.group_by do |owner| + owner[owner_key_name].to_s + end + else + owners.group_by do |owner| + owner[owner_key_name] + end + end end def options @@ -97,6 +99,10 @@ module ActiveRecord records_by_owner end + def key_conversion_required? + association_key_type != owner_key_type + end + def association_key_type @klass.column_types[association_key_name.to_s].type end @@ -112,7 +118,7 @@ module ActiveRecord @preloaded_records.map { |record| key = record[association_key_name] - key = key.to_s unless owner_key_type == association_key_type + key = key.to_s if key_conversion_required? [record, key] } |