我正在努力了解这是如何运作的,如果有人可以帮助我会很棒。我有一个如下所示的模块:
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
调用此方法来调用受保护的方法。这是如何工作的?
答案 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
。
有谁知道我如何使用来自两个文件的实例和类方法的受保护方法,这会有很大的好处吗?