【问题标题】: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修饰符。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-07-30
      • 1970-01-01
      • 2013-02-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-02-24
      相关资源
      最近更新 更多