Из-за того, что Rails загружает ваши модули, вы не можете сделать это без изменений.
Rails включает связанные вспомогательные модели в экземпляр ActionView :: Base, используемый для визуализации шаблона. ActionController :: Helpers # helper (используется в примере выше) добавляет дополнительные вспомогательные модули в список тех, которые будут включены. Вспомогательные методы, используемые в представлениях, записываются как методы экземпляра. Модули в Ruby не предоставляют никаких хороших способов получения методов экземпляра без использования конструктора. Что является одной из самых важных вещей, которая отделяет модули от классов.
Чтобы получить доступ к вашим помощникам из другого контроллера, набрав всего OtherControllersHelper.method
, вам необходимо переопределить метод как метод класса. Однако переопределение этих методов как методов класса сделает их недоступными для ваших представлений.
Вы можете дублировать все методы экземпляра в ваших помощниках как методы класса, но это определенно не лучшее решение, чем добавление helper :other_controllers
. Существуют способы прагматично определять оболочки, но, опять же, это не лучший способ справиться с ситуацией.
Если у вас есть много помощников, которые могут использоваться в нескольких контроллерах / представлениях, возможно, вам лучше разместить их где-нибудь еще. Где-то вроде app / helpers / application_helper.rb. Или другой вспомогательный модуль, который может быть загружен только в те контроллеры, которые в нем нуждаются.