ard*_*vis 3 ruby gem ruby-on-rails devise ruby-on-rails-3
我正在尝试将一个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
Run Code Online (Sandbox Code Playgroud)
然后我尝试使用UserTracker模块扩展SessionsController.
Devise::SessionsController.extend UserTracker
Run Code Online (Sandbox Code Playgroud)
这不起作用,因为我的模块加载时没有加载设计.这导致以下错误:
uninitialized constant Devise::SessionsController (NameError)
Run Code Online (Sandbox Code Playgroud)
基本上,我想在每次会话被破坏时运行一个方法,而不会覆盖整个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
Run Code Online (Sandbox Code Playgroud)
的routes.rb
#--
# Devise
devise_for :users, :controllers => { :sessions => 'user_trackers'}
Run Code Online (Sandbox Code Playgroud)
现在的问题是,如果我尝试登录(或在这种情况下注销),我会收到以下错误:
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"
Run Code Online (Sandbox Code Playgroud)
我不希望我的新UserTrackersController做任何事情,除了向现有的Sessions控制器添加一些小代码.所以我仍然需要设计如前所述的功能.
再次感谢.
Dut*_*tow 13
你为什么不真正扩展SessionsController?
例如
class MySessionsController < Devise::SessionsController
# my changes
end
Run Code Online (Sandbox Code Playgroud)
在路由配置中,您可以告诉devise_for SessionsController使用哪个:
devise_for :controllers => { :sessions => "my_sessions" }
Run Code Online (Sandbox Code Playgroud)
编辑:您可以通过调用生成设计视图:
rails g devise:views <scope>
Run Code Online (Sandbox Code Playgroud)
这将生成app/views/devise/sessions/new.html.erb哪个是您需要的唯一视图.只需将其复制到app/views/my_sessions/new.html.erb它就可以了.