aboutsummaryrefslogtreecommitdiffstats
path: root/activerecord/lib
diff options
context:
space:
mode:
Diffstat (limited to 'activerecord/lib')
-rw-r--r--activerecord/lib/active_record/associations/preloader/association.rb19
1 files changed, 17 insertions, 2 deletions
diff --git a/activerecord/lib/active_record/associations/preloader/association.rb b/activerecord/lib/active_record/associations/preloader/association.rb
index bf461070e0..5a172a417d 100644
--- a/activerecord/lib/active_record/associations/preloader/association.rb
+++ b/activerecord/lib/active_record/associations/preloader/association.rb
@@ -58,7 +58,11 @@ module ActiveRecord
def owners_by_key
@owners_by_key ||= owners.group_by do |owner|
- owner[owner_key_name]
+ if owner_key_type == association_key_type
+ owner[owner_key_name]
+ else
+ owner[owner_key_name].to_s
+ end
end
end
@@ -93,13 +97,24 @@ module ActiveRecord
records_by_owner
end
+ def association_key_type
+ @klass.column_types[association_key_name.to_s].type
+ end
+
+ def owner_key_type
+ @model.column_types[owner_key_name.to_s].type
+ end
+
def load_slices(slices)
@preloaded_records = slices.flat_map { |slice|
records_for(slice)
}
@preloaded_records.map { |record|
- [record, record[association_key_name]]
+ key = record[association_key_name]
+ key = key.to_s unless owner_key_type == association_key_type
+
+ [record, key]
}
end