aboutsummaryrefslogtreecommitdiffstats
path: root/activerecord/lib/active_record/scoping/named.rb
diff options
context:
space:
mode:
authorChen Kinnrot <kinnrot@gmail.com>2017-11-18 21:22:00 +0200
committerChen Kinnrot <kinnrot@gmail.com>2017-11-28 15:50:18 +0200
commit6552ce0361f30a46a58a8bcb659866f06c8b7430 (patch)
tree9dafcb449cade201f9979ba94d935d93501a37e2 /activerecord/lib/active_record/scoping/named.rb
parentf2b6406066888aaa10aba6c3cb95c2eb6dda760e (diff)
downloadrails-6552ce0361f30a46a58a8bcb659866f06c8b7430.tar.gz
rails-6552ce0361f30a46a58a8bcb659866f06c8b7430.tar.bz2
rails-6552ce0361f30a46a58a8bcb659866f06c8b7430.zip
Prevent scope named same as a ActiveRecord::Relation instance method.
Due to inconsistent behavior when chaining scopes and one scope named after a Relation method Validation code added in 2 places: - scope, to prevent problematic scope names. - enum, cause it tries to auto define scope.
Diffstat (limited to 'activerecord/lib/active_record/scoping/named.rb')
-rw-r--r--activerecord/lib/active_record/scoping/named.rb6
1 files changed, 6 insertions, 0 deletions
diff --git a/activerecord/lib/active_record/scoping/named.rb b/activerecord/lib/active_record/scoping/named.rb
index 310af72c41..752655aa05 100644
--- a/activerecord/lib/active_record/scoping/named.rb
+++ b/activerecord/lib/active_record/scoping/named.rb
@@ -171,6 +171,12 @@ module ActiveRecord
"a class method with the same name."
end
+ if method_defined_within?(name, Relation)
+ raise ArgumentError, "You tried to define a scope named \"#{name}\" " \
+ "on the model \"#{self.name}\", but ActiveRecord::Relation already defined " \
+ "an instance method with the same name."
+ end
+
valid_scope_name?(name)
extension = Module.new(&block) if block