我试图理解这是如何工作的,如果有人可以帮助我会很棒。我有一个模块,它看起来像下面:ClassMethods之外的Ruby模块方法
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
来调用这个保护方法。这个怎么用?
你是否在某处混入了你的模块? – user2422869
我做'包括Timeline :: Track',然后从我的模型track_now(:new_item,user :: pilot)调用该方法,这是你要求的吗? – Peter
简单地说:你不能。一个类不知道它的实例,因此“类方法”不能调用一个实例方法。 –