Skip to content
Browse files

Use new finder methods for association preloading

  • Loading branch information...
1 parent f80be3e commit cfdfd899262c79c37ac89e030f4d90c8f9868b50 @lifo lifo committed Jan 16, 2010
Showing with 16 additions and 17 deletions.
  1. +16 −17 activerecord/lib/active_record/association_preload.rb
View
33 activerecord/lib/active_record/association_preload.rb
@@ -188,11 +188,11 @@ def preload_has_and_belongs_to_many_association(records, reflection, preload_opt
conditions << append_conditions(reflection, preload_options)
associated_records = reflection.klass.with_exclusive_scope do
- reflection.klass.find(:all, :conditions => [conditions, ids],
- :include => options[:include],
- :joins => "INNER JOIN #{connection.quote_table_name options[:join_table]} t0 ON #{reflection.klass.quoted_table_name}.#{reflection.klass.primary_key} = t0.#{reflection.association_foreign_key}",
- :select => "#{options[:select] || table_name+'.*'}, t0.#{reflection.primary_key_name} as the_parent_record_id",
- :order => options[:order])
+ reflection.klass.where([conditions, ids]).
+ includes(options[:include]).
+ joins("INNER JOIN #{connection.quote_table_name options[:join_table]} t0 ON #{reflection.klass.quoted_table_name}.#{reflection.klass.primary_key} = t0.#{reflection.association_foreign_key}").
+ select("#{options[:select] || table_name+'.*'}, t0.#{reflection.primary_key_name} as the_parent_record_id").
+ order(options[:order]).to_a
end
set_association_collection_records(id_to_record_map, reflection.name, associated_records, 'the_parent_record_id')
end
@@ -327,6 +327,7 @@ def preload_belongs_to_association(records, reflection, preload_options={})
table_name = klass.quoted_table_name
primary_key = klass.primary_key
column_type = klass.columns.detect{|c| c.name == primary_key}.type
+
ids = id_map.keys.map do |id|
if column_type == :integer
id.to_i
@@ -336,15 +337,14 @@ def preload_belongs_to_association(records, reflection, preload_options={})
id
end
end
+
conditions = "#{table_name}.#{connection.quote_column_name(primary_key)} #{in_or_equals_for_ids(ids)}"
conditions << append_conditions(reflection, preload_options)
+
associated_records = klass.with_exclusive_scope do
- klass.find(:all, :conditions => [conditions, ids],
- :include => options[:include],
- :select => options[:select],
- :joins => options[:joins],
- :order => options[:order])
+ klass.where([conditions, ids]).apply_finder_options(options.slice(:include, :select, :joins, :order)).to_a
end
+
set_association_single_records(id_map, reflection.name, associated_records, primary_key)
end
end
@@ -363,13 +363,12 @@ def find_associated_records(ids, reflection, preload_options)
conditions << append_conditions(reflection, preload_options)
reflection.klass.with_exclusive_scope do
- reflection.klass.find(:all,
- :select => (preload_options[:select] || options[:select] || "#{table_name}.*"),
- :include => preload_options[:include] || options[:include],
- :conditions => [conditions, ids],
- :joins => options[:joins],
- :group => preload_options[:group] || options[:group],
- :order => preload_options[:order] || options[:order])
+ reflection.klass.select(preload_options[:select] || options[:select] || "#{table_name}.*").
+ includes(preload_options[:include] || options[:include]).
+ where([conditions, ids]).
+ joins(options[:joins]).
+ group(preload_options[:group] || options[:group]).
+ order(preload_options[:order] || options[:order])
end
end

0 comments on commit cfdfd89

Please sign in to comment.
Something went wrong with that request. Please try again.