123456789_123456789_123456789_123456789_123456789_

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:
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

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