Method: ActiveRecord::QueryMethods#extending

Defined in:
lib/active_record/relation/query_methods.rb

#extending(*modules) ⇒ Object

Used to extend a scope with additional methods, either through a module or through a block provided.

The object returned is a relation, which can be further extended.

Using a module

module Pagination
  def page(number)
    # pagination code goes here
  end
end

scope = Model.scoped.extending(Pagination)
scope.page(params[:page])

You can also pass a list of modules:

scope = Model.scoped.extending(Pagination, SomethingElse)

Using a block

scope = Model.scoped.extending do
  def page(number)
    # pagination code goes here
  end
end
scope.page(params[:page])

You can also use a block and a module list:

scope = Model.scoped.extending(Pagination) do
  def per_page(number)
    # pagination code goes here
  end
end


243
244
245
246
247
248
249
250
251
# File 'lib/active_record/relation/query_methods.rb', line 243

def extending(*modules)
  modules << Module.new(&Proc.new) if block_given?

  return self if modules.empty?

  relation = clone
  relation.send(:apply_modules, modules.flatten)
  relation
end