Немного вопросов:
Действительно ли возможно назвать метод контроллера в модуле помощника (например, помощник приложения)?
Если так, как помощник обрабатывает рендеринг представлений? Проигнорировать его?
В каких экземплярах Вы хотели бы назвать метод контроллера от помощника? Это - плохая практика?
У Вас есть какой-либо пример кода, где Вы называете методы контроллера в помощнике?
Обычно вы не вызываете методы контроллера из хелперов. То есть: если вы имеете в виду метод, который собирает данные и затем отображает представление (любой другой метод, который должен быть вызван, вероятно, не должен находиться в контроллере). Это определенно плохая практика и нарушает MVC.
Однако вполне возможно сделать методы контроллера доступными в представлениях, отличным примером является, например, метод current_user
.
Чтобы сделать метод контроллера доступным в представлениях в качестве вспомогательного метода, просто сделайте
private
def current_user
# do something sensible here
@current_user ||= session[:user]
end
helper_method :current_user
Такой метод лучше всего определить в секции private
, или он может быть доступен как действие (если вы используете подстановочный знак в маршрутизации).
Вызов контроллера из помощника нарушает шаблон MVC. IMO, если вам нужно вызвать контроллер из помощника представления Rails (например, application_helper
), то в дизайне есть что-то, что можно улучшить. Предполагается, что помощники «помогают» представлениям и поэтому разговаривают только с моделями.
Я не собираюсь здесь защищать сам MVC (в сети есть масса ссылок), но этот SO-поток о вызове контроллера из представления должен помочь вам начать работу.
Вызов контроллера из представления? (обратите внимание, что это поток ASP.NET, поэтому важны только принципы высокого уровня).