instance method set_callback

Ruby on Rails 6.1.7.10

Since v3.0.20

Available in: v3.0.20 v3.1.12 v3.2.22.5 v4.0.13 v4.1.16 v4.2.9 v5.2.8.1 v6.0.6 v6.1.7.10 v7.0.10 v7.1.6 v7.2.3 v8.0.4 v8.1.2

Signature

set_callback(name, *filter_list, &block)

Install a callback for the given event.

set_callback :save, :before, :before_method
set_callback :save, :after,  :after_method, if: :condition
set_callback :save, :around, ->(r, block) { stuff; result = block.call; stuff }

The second argument indicates whether the callback is to be run :before, :after, or :around the event. If omitted, :before is assumed. This means the first example above can also be written as:

set_callback :save, :before_method

The callback can be specified as a symbol naming an instance method; as a proc, lambda, or block; or as an object that responds to a certain method determined by the :scope argument to define_callbacks.

If a proc, lambda, or block is given, its body is evaluated in the context of the current object. It can also optionally accept the current object as an argument.

Before and around callbacks are called in the order that they are set; after callbacks are called in the reverse order.

Around callbacks can access the return value from the event, if it wasn’t halted, from the yield call.

Options
  • :if - A symbol or an array of symbols, each naming an instance method or a proc; the callback will be called only when they all return a true value.

    If a proc is given, its body is evaluated in the context of the current object. It can also optionally accept the current object as an argument.

  • :unless - A symbol or an array of symbols, each naming an instance method or a proc; the callback will be called only when they all return a false value.

    If a proc is given, its body is evaluated in the context of the current object. It can also optionally accept the current object as an argument.

  • :prepend - If true, the callback will be prepended to the existing chain rather than appended.

Parameters

name req
filter_list rest
block block
Source
# File activesupport/lib/active_support/callbacks.rb, line 673
        def set_callback(name, *filter_list, &block)
          type, filters, options = normalize_callback_params(filter_list, block)

          self_chain = get_callbacks name
          mapped = filters.map do |filter|
            Callback.build(self_chain, filter, type, options)
          end

          __update_callbacks(name) do |target, chain|
            options[:prepend] ? chain.prepend(*mapped) : chain.append(*mapped)
            target.set_callbacks name, chain
          end
        end

Defined in activesupport/lib/active_support/callbacks.rb line 673 · View on GitHub · Improve this page · Find usages on GitHub

Defined in ActiveSupport::Callbacks::ClassMethods

Type at least 2 characters to search.

↑↓ navigate · open · esc close