aboutsummaryrefslogtreecommitdiffstats
path: root/activerecord/lib
diff options
context:
space:
mode:
authorRafael Mendonça França <rafaelmfranca@gmail.com>2012-12-04 04:12:35 -0800
committerRafael Mendonça França <rafaelmfranca@gmail.com>2012-12-04 04:12:35 -0800
commita9dc44677ca0caa3660a54b191dca5229dc25f4f (patch)
treef7e3cf4d528c38145c0e547fd345d2d19823fa6c /activerecord/lib
parentc7e4ee79326d81f78cfa3d958a8fce34fde83a15 (diff)
parentdb51704bd9458635ad82e6a7de56a9fd56db64d4 (diff)
downloadrails-a9dc44677ca0caa3660a54b191dca5229dc25f4f.tar.gz
rails-a9dc44677ca0caa3660a54b191dca5229dc25f4f.tar.bz2
rails-a9dc44677ca0caa3660a54b191dca5229dc25f4f.zip
Merge pull request #8403 from senny/3313_after_find_is_triggered_too_often
Do not instantiate intermediate AR objects when eager loading.
Diffstat (limited to 'activerecord/lib')
-rw-r--r--activerecord/lib/active_record/relation/finder_methods.rb6
1 files changed, 4 insertions, 2 deletions
diff --git a/activerecord/lib/active_record/relation/finder_methods.rb b/activerecord/lib/active_record/relation/finder_methods.rb
index eafe4a54c4..7ddaea1bb0 100644
--- a/activerecord/lib/active_record/relation/finder_methods.rb
+++ b/activerecord/lib/active_record/relation/finder_methods.rb
@@ -225,9 +225,11 @@ module ActiveRecord
orders = relation.order_values.map { |val| val.presence }.compact
values = @klass.connection.distinct("#{quoted_table_name}.#{primary_key}", orders)
- relation = relation.dup
+ relation = relation.dup.select(values)
+
+ id_rows = @klass.connection.select_all(relation.arel, 'SQL', relation.bind_values)
+ ids_array = id_rows.map {|row| row[primary_key]}
- ids_array = relation.select(values).collect {|row| row[primary_key]}
ids_array.empty? ? raise(ThrowResult) : table[primary_key].in(ids_array)
end