【问题标题】:Add private method to class by mixin通过 mixin 将私有方法添加到类
【发布时间】:2013-06-02 09:58:48
【问题描述】:
我想通过我的插件向 Role 模型添加一个after_create 回调。所以我可以像往常一样通过class_eval 添加after_callback :my_private_method。我可以通过在 Role 模型中混合的模块中的InstanceMethods 中定义它来添加公共方法。
但是如何将私有方法 my_private_method 添加到 Role 模型以在 after_create 回调中使用?
我知道这可以通过class_eval 实现,但有没有更好的解决方案?
【问题讨论】:
标签:
ruby-on-rails
ruby
metaprogramming
redmine
redmine-plugins
【解决方案1】:
哦,这真的很容易:
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中使用private修饰符。