通过mixin将私有方法添加到类中

时间:2013-06-02 09:58:49

标签: ruby-on-rails ruby metaprogramming redmine redmine-plugins

我想通过我的插件向角色模型添加after_create回调。所以我可以像往常一样after_callback :my_private_method添加class_eval。我可以通过在角色模型中混合的模块中的InstanceMethods中定义公共方法来添加公共方法。

但是如何在my_private_method回调中使用私有方法after_create角色模型?

我知道这可以由class_eval实现,但有没有更好的解决方案?

1 个答案:

答案 0 :(得分:2)

哦,这真的很容易:

module RolePatch
  module InstanceMethods
    private    <<<<<<<<<<<<<<<<<<<<<<<<<<<<   It works like a charm.
    def my_private_method; end
  end

  def self.included(receiver)
    receiver.send :include, InstanceMethods

    receiver.class_eval do
      after_create :my_private_method
    end
  end
end

1.9.3p392 :017 > Role.first.private_methods.grep(/my_private_method/)
 => [:my_private_method]

因此我们可以像往常一样在模块InstanceMethods中使用私有修饰符。