вызвать помощника из другого ракурса - PullRequest
1 голос
/ 17 декабря 2009

Я знаю, что если я хочу вызвать помощника другого контроллера, я могу сделать что-то вроде:

helper :other_controllers

Но мне было интересно, почему я не могу сделать что-то вроде OtherControllersHelper.method внутри представления?

1 Ответ

5 голосов
/ 17 декабря 2009

Из-за того, что Rails загружает ваши модули, вы не можете сделать это без изменений.

Rails включает связанные вспомогательные модели в экземпляр ActionView :: Base, используемый для визуализации шаблона. ActionController :: Helpers # helper (используется в примере выше) добавляет дополнительные вспомогательные модули в список тех, которые будут включены. Вспомогательные методы, используемые в представлениях, записываются как методы экземпляра. Модули в Ruby не предоставляют никаких хороших способов получения методов экземпляра без использования конструктора. Что является одной из самых важных вещей, которая отделяет модули от классов.

Чтобы получить доступ к вашим помощникам из другого контроллера, набрав всего OtherControllersHelper.method, вам необходимо переопределить метод как метод класса. Однако переопределение этих методов как методов класса сделает их недоступными для ваших представлений.

Вы можете дублировать все методы экземпляра в ваших помощниках как методы класса, но это определенно не лучшее решение, чем добавление helper :other_controllers. Существуют способы прагматично определять оболочки, но, опять же, это не лучший способ справиться с ситуацией.

Если у вас есть много помощников, которые могут использоваться в нескольких контроллерах / представлениях, возможно, вам лучше разместить их где-нибудь еще. Где-то вроде app / helpers / application_helper.rb. Или другой вспомогательный модуль, который может быть загружен только в те контроллеры, которые в нем нуждаются.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...