提交 111968d4 编写于 作者: J Jon Leighton

Foo.joins(:bar).includes(:bar) should result in a single query with :bar as a join. Related: #1873.

上级 b65bd01d
......@@ -408,7 +408,17 @@ def scope_for_create
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)
......
......@@ -1040,4 +1040,12 @@ def test_preloading_polymorphic_with_custom_foreign_type
}
assert_no_queries { assert_equal groucho, sponsor.thing }
end
def test_joins_with_includes_should_preload_via_joins
post = assert_queries(1) { Post.includes(:comments).joins(:comments).order('posts.id desc').to_a.first }
assert_queries(0) do
assert_not_equal 0, post.comments.to_a.count
end
end
end
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册