Если бы метод был определен непосредственно в контроллере, вам пришлось бы сделать его доступным для представлений, вызвав 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-конструкций.)
person
kch
schedule
12.08.2009
return unless m < ActionController::Base? - person Liquiddots   schedule 17.11.2010