Методы Ruby-модулей вне ClassMethods
Я пытаюсь понять, как это работает, и было бы здорово, если бы кто-то мог мне помочь. У меня есть модуль, который выглядит следующим образом:
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
, Как это работает?
2 ответа
В конце концов я создал новый файл track_now.rb
который был дубликатом track.rb
но сделал все методы ClassMethod
,
Кто-нибудь знает, как я могу использовать защищенные методы из экземпляра и методы класса из обоих файлов, это было бы большим преимуществом?
Кажется, вы хотите вызвать метод экземпляра из метода класса. Я не рекомендую вам это делать, но если вы действительно хотите, вы можете попробовать следующее:
def track_now(name, options={})
self.new.instance_eval {add_activity activity(verb: name)}
end