提交 ed9a183e 编写于 作者: N Neeraj Singh

clearer documentation of how scope applies to ActiveSupport callbacks

上级 f587dec2
......@@ -530,28 +530,40 @@ def reset_callbacks(symbol)
# the given block or an before_filter raises an error. Supply :rescuable => true
# to change this behavior.
#
# * <tt>:scope</tt> - Show which methods should be executed when a class
# * <tt>:scope</tt> - Indicates which methods should be executed when a class
# is given as callback:
#
# define_callbacks :filters, :scope => [ :kind ]
#
# When a class is given:
#
# before_filter MyFilter
#
# It will call the type of the filter in the given class, which in this
# case, is "before".
#
# If, for instance, you supply the given scope:
#
# define_callbacks :validate, :scope => [ :kind, :name ]
#
# It will call "#{kind}_#{name}" in the given class. So "before_validate"
# will be called in the class below:
#
# before_validate MyValidation
#
# Defaults to :kind.
# class Audit
# def before(caller)
# puts 'Audit: before is called'
# end
# def before_save(caller)
# puts 'Audit: before_save is called'
# end
# end
#
# class Account
# include ActiveSupport::Callbacks
# define_callbacks :save
# set_callback :save, :before, Audit.new
# def save
# run_callbacks :save do
# puts 'save in main'
# end
# end
# end
#
# In the above case if you execute Account.new.save then method "before" of Audit class
# will be called. Now change the class "Account" and pass "scope" to method "define_callbacks".
#
# define_callbacks :save, :scope => [:kind, :name]
#
# Now if you invoke Account.new.save then method "before_save" of Audit will be called
# instead of method "before".
#
# When you do not pass any scope then the default value of scope ":kind" is implicitly being
# passed. In the above case method "before_save" is constructed by calling "#{kind}_#{name}"
# in the given class. In this case "kind" is "before" and "name" is "save".
#
def define_callbacks(*callbacks)
config = callbacks.last.is_a?(Hash) ? callbacks.pop : {}
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册