diff options
author | thedarkone <thedarkone2@gmail.com> | 2014-03-30 20:52:01 +0200 |
---|---|---|
committer | thedarkone <thedarkone2@gmail.com> | 2014-03-30 20:52:01 +0200 |
commit | 055942d6c526de3a037e76e14954229888668515 (patch) | |
tree | 6c0c34445f4c447078f445f1cf35994af7f35cae /activerecord/lib/active_record/associations/preloader.rb | |
parent | de32d972bfde8871f7c1a4621f2223ea9b6715b2 (diff) | |
download | rails-055942d6c526de3a037e76e14954229888668515.tar.gz rails-055942d6c526de3a037e76e14954229888668515.tar.bz2 rails-055942d6c526de3a037e76e14954229888668515.zip |
Simplify Preloader#grouped_records code.
The new method relies on AR::Associations::Association knowing about both reflection and a model class.
AR::Base#association now raises a descriptive error when trying to access non-existent associations. Previously it would blow up with a confusing NoMethodError: undefined method `association_class' for nil:NilClass.
Diffstat (limited to 'activerecord/lib/active_record/associations/preloader.rb')
-rw-r--r-- | activerecord/lib/active_record/associations/preloader.rb | 26 |
1 files changed, 6 insertions, 20 deletions
diff --git a/activerecord/lib/active_record/associations/preloader.rb b/activerecord/lib/active_record/associations/preloader.rb index e6485b2b0c..31ddf4e0fc 100644 --- a/activerecord/lib/active_record/associations/preloader.rb +++ b/activerecord/lib/active_record/associations/preloader.rb @@ -140,27 +140,13 @@ module ActiveRecord end def grouped_records(association, records) - reflection_records = records_by_reflection(association, records) - - reflection_records.each_with_object({}) do |(reflection, r_records),h| - h[reflection] = r_records.group_by { |record| - record.association(association).klass - } - end - end - - def records_by_reflection(association, records) - records.group_by do |record| - reflection = record.class.reflect_on_association(association) - - reflection || raise_config_error(record, association) + h = {} + records.each do |record| + assoc = record.association(association) + klasses = h[assoc.reflection] ||= {} + (klasses[assoc.klass] ||= []) << record end - end - - def raise_config_error(record, association) - raise ActiveRecord::ConfigurationError, - "Association named '#{association}' was not found on #{record.class.name}; " \ - "perhaps you misspelled it?" + h end class AlreadyLoaded |