diff options
-rw-r--r-- | activerecord/lib/active_record/relation.rb | 7 | ||||
-rw-r--r-- | activerecord/lib/active_record/relation/finder_methods.rb | 9 | ||||
-rw-r--r-- | activerecord/test/cases/relations_test.rb | 7 |
3 files changed, 15 insertions, 8 deletions
diff --git a/activerecord/lib/active_record/relation.rb b/activerecord/lib/active_record/relation.rb index 6728443251..2cf19c76c5 100644 --- a/activerecord/lib/active_record/relation.rb +++ b/activerecord/lib/active_record/relation.rb @@ -271,7 +271,12 @@ module ActiveRecord def empty? return @records.empty? if loaded? - limit_value == 0 || !exists? + if limit_value == 0 + true + else + c = count(:all) + c.respond_to?(:zero?) ? c.zero? : c.empty? + end end # Returns true if there are no records. diff --git a/activerecord/lib/active_record/relation/finder_methods.rb b/activerecord/lib/active_record/relation/finder_methods.rb index b83032e2a0..435cef901b 100644 --- a/activerecord/lib/active_record/relation/finder_methods.rb +++ b/activerecord/lib/active_record/relation/finder_methods.rb @@ -280,8 +280,8 @@ module ActiveRecord return false if !conditions - relation = apply_join_dependency(self, construct_join_dependency_for_exists) - return false if ActiveRecord::NullRelation === relation || limit_value == 0 + relation = apply_join_dependency(self, construct_join_dependency) + return false if ActiveRecord::NullRelation === relation relation = relation.except(:select, :order).select(ONE_AS_ONE).limit(1) @@ -359,11 +359,6 @@ module ActiveRecord ActiveRecord::Associations::JoinDependency.new(@klass, including, joins) end - def construct_join_dependency_for_exists - including = (eager_load_values + includes_values) & references_values.map(&:to_sym) - ActiveRecord::Associations::JoinDependency.new(@klass, including, []) - end - def construct_relation_for_association_calculations from = arel.froms.first if Arel::Table === from diff --git a/activerecord/test/cases/relations_test.rb b/activerecord/test/cases/relations_test.rb index cd23c1b3e1..7149c7d072 100644 --- a/activerecord/test/cases/relations_test.rb +++ b/activerecord/test/cases/relations_test.rb @@ -18,6 +18,7 @@ require 'models/minivan' require 'models/aircraft' require "models/possession" require "models/reader" +require "models/categorization" class RelationTest < ActiveRecord::TestCase fixtures :authors, :topics, :entrants, :developers, :companies, :developers_projects, :accounts, :categories, :categorizations, :posts, :comments, @@ -918,6 +919,12 @@ class RelationTest < ActiveRecord::TestCase assert authors.exists?(authors(:david).id) end + def test_any_with_scope_on_hash_includes + post = authors(:david).posts.first + categories = Categorization.includes(author: :posts).where(posts: { id: post.id }) + assert categories.exists? + end + def test_last authors = Author.all assert_equal authors(:bob), authors.last |