ClassMethods之外的Ruby Modules方法

时间:2013-11-23 21:50:55

标签: ruby activesupport

我正在努力了解这是如何运作的,如果有人可以帮助我会很棒。我有一个如下所示的模块:

module Activity::Track
  extend ActiveSupport::Concern

  module ClassMethods
    def track_now(name, options={})
      add_activity activity(verb: name)
    end
  end

  protected

  def activity(options={})
  end

  def add_activity(activity_item)
  end
end

我正在做的是从我的模型中调用track_now方法,这很好但效果很好,但我无法调用add_activityactivity方法。我不明白如何在ClassMethods模块中调用它们。有人可以解释我怎么做到这一点吗?

我在另一个项目中看到了这一点,但是通过创建define_method并通过send :after_create :define_method调用此方法来调用受保护的方法。这是如何工作的?

2 个答案:

答案 0 :(得分:0)

似乎你想从类方法中调用实例方法。我不建议你这样做,但如果你真的想要,你可以尝试如下:

def track_now(name, options={})
  self.new.instance_eval {add_activity activity(verb: name)}
end

答案 1 :(得分:0)

最后,我创建了一个新文件track_now.rb,该文件与track.rb重复,但所有方法都为ClassMethod

有谁知道我如何使用来自两个文件的实例和类方法的受保护方法,这会有很大的好处吗?