8

我正在使用设计,视图文件是/devise/registrations/edit.html.erb(我没有对其进行任何更改):

<div><%= f.label :password %>
<%= f.password_field :password, :autocomplete => "off" %></div>

<div><%= f.label :password_confirmation %>
<%= f.password_field :password_confirmation %></div>

<% if f.object.encrypted_password.present? %>
   <div><%= f.label :current_password %> <i>(we need your current password to confirm your changes)</i><br />
   <%= f.password_field :current_password %></div>
<% end %>
<div><%= f.submit "Update" %></div>

当用户更改密码时,他们将被重定向到root_url(主页)。我想将它们保留在更改密码页面,即/users/edit. 我该怎么做?

编辑-我确实有带有编辑方法的registration_controller,我应该在其中添加什么?

4

3 回答 3

11

中的update操作PasswordsController调用名为 的受保护方法after_resetting_password_path_for

该方法只是调用,所以我认为子类化和覆盖这个方法after_sign_in_path_for应该是安全的。PasswordsController

看起来已经对何时覆盖此方法进行了测试,因此看起来它绝对受支持。

于 2013-07-23T17:11:46.970 回答
6

首先,OP在更改密码后存在重定向问题,更改密码在设计中RegistrationsController,而PasswordsController“重置密码”。仅供参考@amesee 重置密码后重定向的答案。更改密码和重置密码不同

如何:在用户编辑他们的个人资料并查看after_update_path_for(resource)后自定义重定向

你应该在你的外表上添加after_update_path_for(resource)方法:registrations_controller.rb

class RegistrationsController < Devise::RegistrationsController

  protected

    def after_update_path_for(resource)
      root_path
    end
end
于 2013-07-23T17:21:40.480 回答
0

如果你有不同的用户和管理员模型,你需要这个:

路线.rb

devise_for :admins, controllers: {registrations: 'admins/registrations'}, defaults: { format: 'html' }

应用程序/控制器/管理员/registration_controller.rb

class Admins::RegistrationsController < Devise::RegistrationsController
  def after_update_path_for(resource)
    after_change_password_path # change this
  end
end
于 2016-05-11T03:35:44.080 回答