Я пытаюсь добавить фильтр before_destroy в Devise's SessionsController.
Вот что я пытался:
Я создал модуль, содержащий фильтр before_destroy, и другой модуль с методом, который я хотел вызвать.
module UserTracker
prepend_before_filter :stop_tracking, :only => [:destroy]
module TrackerStopper
def stop_tracking
# Do stuff
end
end
include TrackerStopper
end
А потом я попытался расширить SessionsController с помощью модуля UserTracker.
Devise::SessionsController.extend UserTracker
Это не сработало, потому что devise не загружалось, когда загружался мой модуль. Это привело к ошибке ниже:
uninitialized constant Devise::SessionsController (NameError)
По сути, я хотел бы запускать метод каждый раз, когда сеанс уничтожается, без перезаписи всего SessionsController, но я не могу найти способ смешать его.
Спасибо!
ОБНОВЛЕНИЕ 1: Я отказался от создания отдельного гема, вот код, который я попытался в моем приложении.
UserTrackersController.rb
class UserTrackersController < Devise::SessionsController
prepend_before_filter :stop_tracking, :only => [:destroy]
def stop_tracking
current_user.update_attributes(:current_sign_in_ip => nil)
end
end
routes.rb
#--
# Devise
devise_for :users, :controllers => { :sessions => 'user_trackers'}
Проблема в том, что если я пытаюсь войти (или выйти в этом случае), я получаю следующую ошибку:
Template is missing
Missing template user_trackers/new with {:handlers=>[:erb, :rjs, :builder, :rhtml, :rxml], :formats=>[:html], :locale=>[:en, :en]} in view paths "/net/user10/ardavis2/rubydev/spacecamp/app/views", "/net/user10/ardavis2/.rvm/gems/ruby-1.9.2-p180@spacecamp/gems/devise-1.3.4/app/views"
Я не хочу, чтобы мой новый UserTrackersController делал что-либо, кроме добавления небольшого кода в существующий контроллер Sessions. Поэтому мне все еще нужно разработать устройство, чтобы оно функционировало так, как раньше.
Еще раз спасибо.