gpt4 book ai didi

ruby-on-rails - 扩展 Devise 的 SessionsController

转载 作者:数据小太阳 更新时间:2023-10-29 07:42:13 27 4
gpt4 key购买 nike

我正在尝试向 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)

基本上,我想在每次销毁 session 时运行一个方法,而不覆盖整个 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 做任何事情,除了向现有 session Controller 添加一些小代码。所以我仍然需要设计才能像以前一样运行。

再次感谢。

最佳答案

为什么不真正扩展 SessionsController?

例如

class MySessionsController < Devise::SessionsController
# my changes
end

并且在路由配置中,您可以告诉 devise_for 使用哪个 SessionsController:

devise_for :controllers => { :sessions => "my_sessions" } 

编辑:您可以通过调用生成设计 View :

rails g devise:views <scope>

这将生成 app/views/devise/sessions/new.html.erb,这是您需要的唯一 View 。只需将其复制到 app/views/my_sessions/new.html.erb 即可。

关于ruby-on-rails - 扩展 Devise 的 SessionsController,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6417678/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com