Module: ActiveRecord::Delegation::ClassSpecificRelation
Do not use. This module is for internal use only.
Relationships & Source Files | |
Namespace Children | |
Modules:
| |
Super Chains via Extension / Inclusion / Inheritance | |
Class Chain:
self,
::ActiveSupport::Concern
|
|
Defined in: | activerecord/lib/active_record/relation/delegation.rb |
Class Method Summary
::ActiveSupport::Concern
- Extended
class_methods | Define class methods from given block. |
included | Evaluate given block in context of base class, so that you can write class macros here. |
prepended | Evaluate given block in context of base class, so that you can write class macros here. |
append_features, prepend_features |
Instance Method Summary
- #method_missing(method) private
Dynamic Method Handling
This class handles dynamic methods through the method_missing method
#method_missing(method) (private)
[ GitHub ]# File 'activerecord/lib/active_record/relation/delegation.rb', line 118
def method_missing(method, ...) if model.respond_to?(method) if !DelegateCache.delegate_base_methods && Base.respond_to?(method) # A common mistake in Active Record's own code is to call `ActiveRecord::Base` # class methods on Association. It works because it's automatically delegated, but # can introduce subtle bugs because it sets the global scope. # We can't deprecate this behavior because gems might depend on it, however we # can ban it from Active Record's own test suite to avoid regressions. raise NotImplementedError, "Active Record code shouldn't rely on association delegation into ActiveRecord::Base methods" elsif !Delegation.uncacheable_methods.include?(method) model.generate_relation_method(method) end scoping { model.public_send(method, ...) } else super end end