diff options
author | Rafael Mendonça França <rafaelmfranca@gmail.com> | 2015-08-13 17:31:19 -0300 |
---|---|---|
committer | Rafael Mendonça França <rafaelmfranca@gmail.com> | 2015-08-13 17:31:19 -0300 |
commit | b4b4a611d0eb9aa1c640c5f521c6a43bf2a65bab (patch) | |
tree | 525dc7162b50a7f047c2adda76a813429594524c | |
parent | e50fe85180648be0c4216bd0111f05be1df0988a (diff) | |
parent | 929fcd26179f2b589d52f9515cbd349f1197ece9 (diff) | |
download | rails-b4b4a611d0eb9aa1c640c5f521c6a43bf2a65bab.tar.gz rails-b4b4a611d0eb9aa1c640c5f521c6a43bf2a65bab.tar.bz2 rails-b4b4a611d0eb9aa1c640c5f521c6a43bf2a65bab.zip |
Merge pull request #19770 from vngrs/prevent_duplicated_where_clauses
Prevent duplicating `where` clauses
-rw-r--r-- | activerecord/lib/active_record/scoping/default.rb | 1 | ||||
-rw-r--r-- | activerecord/test/cases/scoping/default_scoping_test.rb | 6 | ||||
-rw-r--r-- | activerecord/test/models/vehicle.rb | 7 |
3 files changed, 14 insertions, 0 deletions
diff --git a/activerecord/lib/active_record/scoping/default.rb b/activerecord/lib/active_record/scoping/default.rb index 3590b8846e..a1adf8e3ee 100644 --- a/activerecord/lib/active_record/scoping/default.rb +++ b/activerecord/lib/active_record/scoping/default.rb @@ -100,6 +100,7 @@ module ActiveRecord end def build_default_scope(base_rel = relation) # :nodoc: + return if abstract_class? if !Base.is_a?(method(:default_scope).owner) # The user has defined their own default scope method, so call that evaluate_default_scope { default_scope } diff --git a/activerecord/test/cases/scoping/default_scoping_test.rb b/activerecord/test/cases/scoping/default_scoping_test.rb index 0dbc60940e..86316ab476 100644 --- a/activerecord/test/cases/scoping/default_scoping_test.rb +++ b/activerecord/test/cases/scoping/default_scoping_test.rb @@ -3,6 +3,7 @@ require 'models/post' require 'models/comment' require 'models/developer' require 'models/computer' +require 'models/vehicle' class DefaultScopingTest < ActiveRecord::TestCase fixtures :developers, :posts, :comments @@ -453,4 +454,9 @@ class DefaultScopingTest < ActiveRecord::TestCase assert_equal 1, scope.where_clause.ast.children.length assert_equal Developer.where(name: "David"), scope end + + def test_with_abstract_class_where_clause_should_not_be_duplicated + scope = Bus.all + assert_equal scope.where_clause.ast.children.length, 1 + end end diff --git a/activerecord/test/models/vehicle.rb b/activerecord/test/models/vehicle.rb new file mode 100644 index 0000000000..ef26170f1f --- /dev/null +++ b/activerecord/test/models/vehicle.rb @@ -0,0 +1,7 @@ +class Vehicle < ActiveRecord::Base + self.abstract_class = true + default_scope -> { where("tires_count IS NOT NULL") } +end + +class Bus < Vehicle +end
\ No newline at end of file |