Ответ 1
Если метод был определен непосредственно в контроллере, вы должны сделать его доступным для просмотра, вызвав helper_method :method_name
.
class ApplicationController < ActionController::Base
def current_user
# ...
end
helper_method :current_user
end
С модулем вы можете сделать то же самое, но это немного сложнее.
module Authentication
def current_user
# ...
end
def self.included m
return unless m < ActionController::Base
m.helper_method :current_user # , :any_other_helper_methods
end
end
class ApplicationController < ActionController::Base
include Authentication
end
А, да, если ваш модуль должен быть строго вспомогательным модулем, вы можете сделать это, как сказал Лихтамберг. Но опять же вы можете просто назвать его AuthenticationHelper
и поместить его в папку app/helpers
.
Хотя, по собственному опыту с кодом аутентификации, вы захотите, чтобы он был доступен как для контроллера, так и для представления. Потому что обычно вы будете обрабатывать авторизацию в контроллере. Помощники доступны исключительно для просмотра. (Я считаю, что они первоначально были предназначены для сокращения сложных конструкций html.)