From ad4786f5fb80b7270e5c92625f9a68a18c939c16 Mon Sep 17 00:00:00 2001 From: Tiago Macedo Date: Fri, 11 Jul 2008 04:18:41 +0100 Subject: [PATCH] Fixing integer quoting issues in association preload --- .../lib/active_record/association_preload.rb | 4 ++-- 1 files changed, 2 insertions(+), 2 deletions(-) diff --git a/activerecord/lib/active_record/association_preload.rb b/activerecord/lib/active_record/association_preload.rb index 49f5270..9974d0e 100644 --- a/activerecord/lib/active_record/association_preload.rb +++ b/activerecord/lib/active_record/association_preload.rb @@ -188,7 +188,6 @@ module ActiveRecord through_records end - # FIXME: quoting def preload_belongs_to_association(records, reflection, preload_options={}) options = reflection.options primary_key_name = reflection.primary_key_name @@ -229,7 +228,8 @@ module ActiveRecord primary_key = klass.primary_key conditions = "#{table_name}.#{primary_key} IN (?)" conditions << append_conditions(options, preload_options) - associated_records = klass.find(:all, :conditions => [conditions, id_map.keys.uniq], + is_numeric = [:integer, :float].include? klass.columns.detect{|c| c.name == primary_key}.type + associated_records = klass.find(:all, :conditions => [conditions, id_map.keys.uniq.map{|k| is_numeric ? k.to_i : k}], :include => options[:include], :select => options[:select], :joins => options[:joins], -- 1.5.6.2 From e8377730b61e5e129c2f409bb7b956a47bf6c230 Mon Sep 17 00:00:00 2001 From: Tiago Macedo Date: Fri, 11 Jul 2008 15:42:57 +0100 Subject: [PATCH] previous patch was bugged, this one should also be faster --- .../lib/active_record/association_preload.rb | 13 +++++++++++-- 1 files changed, 11 insertions(+), 2 deletions(-) diff --git a/activerecord/lib/active_record/association_preload.rb b/activerecord/lib/active_record/association_preload.rb index 9974d0e..ae7a4b4 100644 --- a/activerecord/lib/active_record/association_preload.rb +++ b/activerecord/lib/active_record/association_preload.rb @@ -228,8 +228,17 @@ module ActiveRecord primary_key = klass.primary_key conditions = "#{table_name}.#{primary_key} IN (?)" conditions << append_conditions(options, preload_options) - is_numeric = [:integer, :float].include? klass.columns.detect{|c| c.name == primary_key}.type - associated_records = klass.find(:all, :conditions => [conditions, id_map.keys.uniq.map{|k| is_numeric ? k.to_i : k}], + column_type = klass.columns.detect{|c| c.name == primary_key}.type + ids = id_map.keys.uniq.map do |id| + if column_type == :integer + id.to_i + elsif column_type == :float + id.to_f + else + id + end + end + associated_records = klass.find(:all, :conditions => [conditions, ids], :include => options[:include], :select => options[:select], :joins => options[:joins], -- 1.5.6.2