ruby-on-rails – 扩展Devise的SessionsController
我正在尝试将一个before_destroy过滤器添加到Devise的SessionsController中.
这是我尝试过的: 我创建了一个包含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控制器添加一些小代码.所以我仍然需要设计如前所述的功能. 再次感谢. 解决方法
你为什么不真正扩展SessionsController?
例如. class MySessionsController < Devise::SessionsController # my changes end 在路由配置中,您可以告诉devise_for SessionsController使用哪个: devise_for :controllers => { :sessions => "my_sessions" } 编辑:您可以通过调用生成设计视图: rails g devise:views <scope> 这将生成app / views / devise / sessions / new.html.erb,这是您工作所需的唯一视图.只需将其复制到app / views / my_sessions / new.html.erb即可. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |