Module: ActiveRecord::Delegation::ClassSpecificRelation

Extended by:
ActiveSupport::Concern
Defined in:
lib/active_record/relation/delegation.rb

Overview

:nodoc:

Defined Under Namespace

Modules: ClassMethods

Dynamic Method Handling

This class handles dynamic methods through the method_missing method

#method_missing(method) ⇒ Object (private)



118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
# File '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