Мне было интересно, почему кто-то должен использовать helper_method внутри контроллера для создания вспомогательного метода вместо создания "нормального" способа, который находится внутри вспомогательного файла. Каковы плюсы и минусы этого?
Контроллер helper_method
Ответ 1
helper_method
полезен, когда функциональность - это то, что используется как между контроллером, так и с представлением. Хорошим примером является current_user
.
Если метод больше связан с логикой контроллера, а не форматированием, то он принадлежит контроллеру. Что-то вроде current_user
будет разделяться между всеми контроллерами, поэтому оно должно быть определено в ApplicationController
.
Истинные методы "помощника" относятся к представлению и обрабатывают такие вещи, как форматирование и логика шаблонов. Они редко нужны в контроллере, и они принадлежат их собственному модулю под приложением/помощниками. Вы можете включить их в свой контроллер, когда это необходимо, но в итоге вы получите доступный для вашего контроллера метод поддержки класса, доступный вашему контроллеру.
Ответ 2
для обмена методами между контроллером и представлением у вас есть несколько вариантов:
- use view_context http://apidock.com/rails/AbstractController/Rendering/view_context
- определить его в контроллере и сделать доступным в поле зрения метод класса helper_method http://apidock.com/rails/ActionController/Helpers/ClassMethods/helper_method
- определить его в совместно используемом модуле и включить/расширить