aboutsummaryrefslogtreecommitdiffstats
path: root/activerecord/lib/active_record/relation.rb
diff options
context:
space:
mode:
authorJon Leighton <j@jonathanleighton.com>2011-07-09 11:37:48 +0100
committerJon Leighton <j@jonathanleighton.com>2011-07-09 11:39:04 +0100
commit111968d4024fdccc386979551cdfc7799b39cff0 (patch)
tree1f310d0a4e2947dc56a5f02fc92024cda0240ef4 /activerecord/lib/active_record/relation.rb
parentb65bd01d555651e278099ec2fe5cf9c7db7608d9 (diff)
downloadrails-111968d4024fdccc386979551cdfc7799b39cff0.tar.gz
rails-111968d4024fdccc386979551cdfc7799b39cff0.tar.bz2
rails-111968d4024fdccc386979551cdfc7799b39cff0.zip
Foo.joins(:bar).includes(:bar) should result in a single query with :bar as a join. Related: #1873.
Diffstat (limited to 'activerecord/lib/active_record/relation.rb')
-rw-r--r--activerecord/lib/active_record/relation.rb12
1 files changed, 11 insertions, 1 deletions
diff --git a/activerecord/lib/active_record/relation.rb b/activerecord/lib/active_record/relation.rb
index 6258a16d0f..2d0861d5c9 100644
--- a/activerecord/lib/active_record/relation.rb
+++ b/activerecord/lib/active_record/relation.rb
@@ -408,7 +408,17 @@ module ActiveRecord
end
def eager_loading?
- @should_eager_load ||= (@eager_load_values.any? || (@includes_values.any? && references_eager_loaded_tables?))
+ @should_eager_load ||=
+ @eager_load_values.any? ||
+ @includes_values.any? && (joined_includes_values.any? || references_eager_loaded_tables?)
+ end
+
+ # Joins that are also marked for preloading. In which case we should just eager load them.
+ # Note that this is a naive implementation because we could have strings and symbols which
+ # represent the same association, but that aren't matched by this. Also, we could have
+ # nested hashes which partially match, e.g. { :a => :b } & { :a => [:b, :c] }
+ def joined_includes_values
+ @includes_values & @joins_values
end
def ==(other)