aboutsummaryrefslogtreecommitdiffstats
path: root/activerecord/lib/active_record/association_preload.rb
diff options
context:
space:
mode:
authorTiago Macedo <tmacedo@webreakstuff.com>2008-07-11 04:18:41 +0100
committerPratik Naik <pratiknaik@gmail.com>2008-07-14 23:34:19 +0100
commit76df9fa0680d62ce41fa6f3b743c605101d101d2 (patch)
treec33756ffab05d20ac904fcdda2dc27955a4fac3e /activerecord/lib/active_record/association_preload.rb
parentcd9b24286a90111a08002e0da753198c5fb2432a (diff)
downloadrails-76df9fa0680d62ce41fa6f3b743c605101d101d2.tar.gz
rails-76df9fa0680d62ce41fa6f3b743c605101d101d2.tar.bz2
rails-76df9fa0680d62ce41fa6f3b743c605101d101d2.zip
Fix integer quoting issues in association preload. [#602 state:resolved]
Signed-off-by: Pratik Naik <pratiknaik@gmail.com>
Diffstat (limited to 'activerecord/lib/active_record/association_preload.rb')
-rw-r--r--activerecord/lib/active_record/association_preload.rb15
1 files changed, 12 insertions, 3 deletions
diff --git a/activerecord/lib/active_record/association_preload.rb b/activerecord/lib/active_record/association_preload.rb
index 49f5270396..174ec95de2 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
@@ -227,9 +226,19 @@ module ActiveRecord
table_name = klass.quoted_table_name
primary_key = klass.primary_key
- conditions = "#{table_name}.#{primary_key} IN (?)"
+ conditions = "#{table_name}.#{connection.quote_column_name(primary_key)} IN (?)"
conditions << append_conditions(options, preload_options)
- associated_records = klass.find(:all, :conditions => [conditions, id_map.keys.uniq],
+ 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],