diff options
author | Jon Leighton <j@jonathanleighton.com> | 2011-07-09 11:37:48 +0100 |
---|---|---|
committer | Jon Leighton <j@jonathanleighton.com> | 2011-07-09 11:39:04 +0100 |
commit | 111968d4024fdccc386979551cdfc7799b39cff0 (patch) | |
tree | 1f310d0a4e2947dc56a5f02fc92024cda0240ef4 /activerecord/lib/active_record/relation.rb | |
parent | b65bd01d555651e278099ec2fe5cf9c7db7608d9 (diff) | |
download | rails-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.rb | 12 |
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) |