【问题标题】:Cannot override Devise passwords controller无法覆盖设计密码控制器
【发布时间】:2012-01-10 19:56:32
【问题描述】:

我需要我的 Rails 应用程序在我提交电子邮件后重定向到主页以向我发送重置密码说明。 Devise,默认情况下会在输入电子邮件后呈现登录表单。

所以我试图覆盖Devise::PasswordsController 并更改它的redirect_to,但没有成功。事实上,我认为 Rails 甚至没有上过我的课。这可能是一个非常愚蠢的错误,但我已经做了半天没有成功。

我的想法是从here 覆盖密码控制器。

这是我的控制器:

class PasswordsController < Devise::PasswordsController
  protected
  def after_sending_reset_password_instructions_path_for(resource_name)
    root_url
  end
end

Routes.rb:

devise_for :users, :controllers => {:passwords => "passwords"}
devise_for :users, :controllers => {:registrations => "registrations"}
devise_for :users, :controllers => {:sessions => "sessions"}

我想提一下,我已经在同一个应用程序中覆盖了 Devise 的注册和会话控制器,它们似乎工作正常。

【问题讨论】:

  • 您使用的是什么设计版本?

标签: ruby-on-rails ruby devise


【解决方案1】:

应该可以使用最新版本的 Devise (2.1.2) 覆盖控制器。

class PasswordsController < Devise::PasswordsController
  def new
    super
  end

  def create
    ..override method here..
  end
end

config/routes.rb:

devise_for :users, controllers: { passwords: 'passwords', .. }

如果 Rails 使用派生的 PasswordsController 而不是原始的,您可以检查 rake routes,例如,路由应该包含 passwords#new 而不是 devise/passwords#new

【讨论】:

    【解决方案2】:

    我想您忘了提及您对路线的更改:

    devise_for :users, :controllers => {:sessions => "sessions", :passwords => "passwords"}
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-04-06
      • 1970-01-01
      • 1970-01-01
      • 2015-04-26
      • 2011-04-02
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多