aboutsummaryrefslogtreecommitdiffstats
path: root/activerecord/lib/active_record
diff options
context:
space:
mode:
Diffstat (limited to 'activerecord/lib/active_record')
-rw-r--r--activerecord/lib/active_record/associations/preloader/association.rb22
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]
}