method
preload_belongs_to_association
v2.1.0 -
Show latest stable
- Class:
ActiveRecord::AssociationPreload::ClassMethods
preload_belongs_to_association(records, reflection, preload_options={})private
FIXME: quoting
# File activerecord/lib/active_record/association_preload.rb, line 192
def preload_belongs_to_association(records, reflection, preload_options={})
options = reflection.options
primary_key_name = reflection.primary_key_name
if options[:polymorphic]
polymorph_type = options[:foreign_type]
klasses_and_ids = {}
# Construct a mapping from klass to a list of ids to load and a mapping of those ids back to their parent_records
records.each do |record|
if klass = record.send(polymorph_type)
klass_id = record.send(primary_key_name)
if klass_id
id_map = klasses_and_ids[klass] ||= {}
id_list_for_klass_id = (id_map[klass_id.to_s] ||= [])
id_list_for_klass_id << record
end
end
end
klasses_and_ids = klasses_and_ids.to_a
else
id_map = {}
records.each do |record|
key = record.send(primary_key_name)
if key
mapped_records = (id_map[key.to_s] ||= [])
mapped_records << record
end
end
klasses_and_ids = [[reflection.klass.name, id_map]]
end
klasses_and_ids.each do |klass_and_id|
klass_name, id_map = *klass_and_id
klass = klass_name.constantize
table_name = klass.quoted_table_name
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],
:include => options[:include],
:select => options[:select],
:joins => options[:joins],
:order => options[:order])
set_association_single_records(id_map, reflection.name, associated_records, primary_key)
end
end Related methods
- Protected methods
-
preload_associations - Private methods
-
add_preloaded_record_to_collection -
add_preloaded_records_to_collection -
append_conditions -
construct_id_map -
find_associated_records -
interpolate_sql_for_preload -
preload_belongs_to_association -
preload_has_and_belongs_to_many_association -
preload_has_many_association -
preload_has_one_association -
preload_one_association -
preload_through_records -
set_association_collection_records -
set_association_single_records