【发布时间】:2013-11-23 21:50:54
【问题描述】:
我正在尝试了解这是如何工作的,如果有人可以帮助我,那就太好了。我有一个如下所示的模块:
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_activity 和activity 方法。我不明白如何从 ClassMethods 模块中调用它们。有人可以解释一下我该怎么做吗?
我在另一个项目中看到过这种情况,但受保护的方法是通过创建define_method 然后通过send :after_create :define_method 调用来调用的。这是如何工作的?
【问题讨论】:
-
你是否在某个地方混入了你的模块?
-
我做
include Timeline::Track,然后从我的模型track_now(:new_item, user: :pilot)调用方法,这是你的要求吗? -
简单地说:你不能。一个类不知道它的实例,因此“类方法”不能调用实例方法。
-
@Max 那就举个例子吧。您的回答还通过消除类方法
track_now完全掩盖了它。 -
你是对的。我的错。
标签: ruby activesupport