diff options
author | Rafael Mendonça França <rafaelmfranca@gmail.com> | 2012-12-04 04:49:07 -0800 |
---|---|---|
committer | Rafael Mendonça França <rafaelmfranca@gmail.com> | 2012-12-04 04:49:07 -0800 |
commit | 549da0dd8f88179485b45338bea383fe61775624 (patch) | |
tree | e45ee0a495f7f351e6f3d7822b62ab209e34132e /activerecord/lib | |
parent | dac811e8542ee7b9abb88a5839fa22dd59c7c737 (diff) | |
parent | 1b961765871eba76d50d463d3af6c3c5926f537a (diff) | |
download | rails-549da0dd8f88179485b45338bea383fe61775624.tar.gz rails-549da0dd8f88179485b45338bea383fe61775624.tar.bz2 rails-549da0dd8f88179485b45338bea383fe61775624.zip |
Merge pull request #8413 from senny/8403_backport
backport #8403, no intermediate AR objects when eager loading.
Diffstat (limited to 'activerecord/lib')
-rw-r--r-- | activerecord/lib/active_record/relation/finder_methods.rb | 6 |
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 57ecabb537..cbb2f676c8 100644 --- a/activerecord/lib/active_record/relation/finder_methods.rb +++ b/activerecord/lib/active_record/relation/finder_methods.rb @@ -253,9 +253,11 @@ module ActiveRecord orders = relation.order_values.map { |val| val.presence }.compact values = @klass.connection.distinct("#{@klass.connection.quote_table_name 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 |