diff --git a/activerecord/lib/active_record/association_preload.rb b/activerecord/lib/active_record/association_preload.rb index a305551093b72e0dc6e9b9a7ec31fccf7158a763..ba225b700c3e6c8269487f9a2f07d9ec01c23706 100644 --- a/activerecord/lib/active_record/association_preload.rb +++ b/activerecord/lib/active_record/association_preload.rb @@ -336,11 +336,11 @@ def preload_belongs_to_association(records, reflection, preload_options={}) end end else - id_map = {} - records.each do |record| + id_map = records.group_by do |record| key = record.send(primary_key_name) - (id_map[key.to_s] ||= []) << record if key + key && key.to_s end + id_map.delete nil klasses_and_ids[reflection.klass.name] = id_map unless id_map.empty? end