Методы 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
Другие вопросы по тегам