提交 3b1537a7 编写于 作者: D Daniel Schierbeck 提交者: Daniel Schierbeck

Document the changes to delegate in the guides

上级 2310db37
......@@ -883,6 +883,26 @@ delegate :size, :to => :attachment, :prefix => :avatar
In the previous example the macro generates +avatar_size+ rather than +size+.
WARNING: You can only delegate to public methods on the target object. Trying to delegate to a private or protected method will raise a +NoMethodError+ when the delegate is called.
If you need to delegate to a private or protected method, you will need to implement the delegation method yourself. It's usually rather simple to do using +__send__+:
<ruby>
class Wrapper
def initialize
# Target#zizzle is a private method.
@target = Target.new
end
def zizzle(*args, &block)
# __send__ circumvents the private/protected mechanism.
@target.__send__(:zizzle, *args, &block)
end
end
</ruby>
Since +__send__+ can be used to call private and protected methods, this will not raise a +NoMethodError+.
NOTE: Defined in +active_support/core_ext/module/delegation.rb+
h4. Redefining Methods
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册