diff options
author | Rafael Mendonça França <rafaelmfranca@gmail.com> | 2017-11-28 15:36:51 -0500 |
---|---|---|
committer | Rafael Mendonça França <rafaelmfranca@gmail.com> | 2017-11-28 15:36:51 -0500 |
commit | 8633567169bb7b7bbab1ec8ddf6fe140d6db2e99 (patch) | |
tree | 6e97c2a0772f45c286ba67d629cedb93c588d538 /activerecord/lib | |
parent | 591c4a44580b0d6b5e43395061df9f5e8cfaee49 (diff) | |
parent | 6552ce0361f30a46a58a8bcb659866f06c8b7430 (diff) | |
download | rails-8633567169bb7b7bbab1ec8ddf6fe140d6db2e99.tar.gz rails-8633567169bb7b7bbab1ec8ddf6fe140d6db2e99.tar.bz2 rails-8633567169bb7b7bbab1ec8ddf6fe140d6db2e99.zip |
Merge pull request #31179 from kinnrot/scoping-reserved-names
Scoping reserved names
Diffstat (limited to 'activerecord/lib')
-rw-r--r-- | activerecord/lib/active_record/enum.rb | 2 | ||||
-rw-r--r-- | activerecord/lib/active_record/scoping/named.rb | 6 |
2 files changed, 8 insertions, 0 deletions
diff --git a/activerecord/lib/active_record/enum.rb b/activerecord/lib/active_record/enum.rb index f373b98035..1a3e6e4d09 100644 --- a/activerecord/lib/active_record/enum.rb +++ b/activerecord/lib/active_record/enum.rb @@ -221,6 +221,8 @@ module ActiveRecord def detect_enum_conflict!(enum_name, method_name, klass_method = false) if klass_method && dangerous_class_method?(method_name) raise_conflict_error(enum_name, method_name, type: "class") + elsif klass_method && method_defined_within?(method_name, Relation) + raise_conflict_error(enum_name, method_name, type: "class", source: Relation.name) elsif !klass_method && dangerous_attribute_method?(method_name) raise_conflict_error(enum_name, method_name) elsif !klass_method && method_defined_within?(method_name, _enum_methods_module, Module) 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 |