instance method skip_callback

Ruby on Rails 6.0.6

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

skip_callback(name, *filter_list, &block)

Skip a previously set callback. Like set_callback, :if or :unless options may be passed in order to control when the callback is skipped.

class Writer < Person
   skip_callback :validate, :before, :check_membership, if: -> { age > 18 }
end

An ArgumentError will be raised if the callback has not already been set (unless the :raise option is set to false).

Parameters

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

          options[:raise] = true unless options.key?(:raise)

          __update_callbacks(name) do |target, chain|
            filters.each do |filter|
              callback = chain.find { |c| c.matches?(type, filter) }

              if !callback && options[:raise]
                raise ArgumentError, "#{type.to_s.capitalize} #{name} callback #{filter.inspect} has not been defined"
              end

              if callback && (options.key?(:if) || options.key?(:unless))
                new_callback = callback.merge_conditional_options(chain, if_option: options[:if], unless_option: options[:unless])
                chain.insert(chain.index(callback), new_callback)
              end

              chain.delete(callback)
            end
            target.set_callbacks name, chain
          end
        end

Defined in activesupport/lib/active_support/callbacks.rb line 698 · 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