【发布时间】:2011-06-20 21:21:21
【问题描述】:
我正在尝试向 Devise 的 SessionsController 添加一个 before_destroy 过滤器。
这是我尝试过的:
我创建了一个包含 before_destroy 过滤器的模块和另一个具有我希望它调用的方法的模块。
module UserTracker
prepend_before_filter :stop_tracking, :only => [:destroy]
module TrackerStopper
def stop_tracking
# Do stuff
end
end
include TrackerStopper
end
然后我尝试使用 UserTracker 模块扩展 SessionsController。
Devise::SessionsController.extend UserTracker
这不起作用,因为加载我的模块时未加载设计。这导致了以下错误:
uninitialized constant Devise::SessionsController (NameError)
基本上,我想在每次会话被销毁时运行一个方法,而不覆盖整个 SessionsController,但我想不出一种方法来混合它。
谢谢!
更新 1:我放弃了构建单独的 gem,这是我在应用程序中尝试的代码。
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 控制器添加一些小代码。所以我仍然需要设计来像以前一样发挥作用。
再次感谢。
【问题讨论】:
标签: ruby-on-rails ruby ruby-on-rails-3 devise gem