如何自定义 devise 的 redirect_to (以及遇到的坑)

2016-11-04 09:50:38来源:作者:全栈工程师成长记人点击

方法

用 devise 自带功能修改密码,默认修改密码成功之后会跳转到 root_path,如果想要实现的是,修改完密码之后跳转到用户中心,比如 user_path这样的路径。该如何实现呢?

devise 官方 wiki 给出了 方法,两步搞定:

1.建立 registrations_controller.rb让它继承 Devise 的方法

app/controllers/registrations_controller.rb class RegistrationsController < Devise::RegistrationsController protected def after_update_path_for(resource) user_path #你的路径 endend

2.修改 routes.rb定位到新的 controller

config/routes.rb devise_for :users, :controllers => { :registrations => :registrations } 扩展

一、注册用户和修改密码使用的是 registrations controller,如果想要在注册用户之后跳转到特定的页面,参考以上步骤,使用下面的 method:

app/controllers/registrations_controller.rb def after_sign_up_path_for(resource) welcome_path #你的路径 end

二、登录用户使用的是 sessions controller,如果想要在用户登录之后跳转到特定页面,方法跟上面的则不太一样,这里只需要修改 app/controllers/application_controller.rb,增加以下 method:

app/controllers/application_controller.rb def after_sign_in_path_for(_user) account_path #你的路径 end 遇到的坑

本来今天在实现这个修改密码的跳转功能是瞬间就可以实现的事情,但问题在于,由于使用了新的 registrations controller ,导致现在新用户无法注册(旧用户可以登录、修改密码)。

排错过程

1.注册的时候填写的用户邮件、用户名、密码全部符合规范,但是提交表单 simple form 会提示出现错误,而且错误框并没有定位在注册页面的任何一个栏位,说明是其它栏位出了问题。

2.小伙伴哲伟用自己的代码修改 registrations controller ,一切正常,可以注册。

3.在自己的功能分支 merge 小伙伴的分支,问题重现。

4.在 develop 分支 merge 小伙伴的分支,没有问题。到此,可以判断问题出现在自己的功能分支。

5.回溯自己的 commit ,发现有在 user model 里面增加了一个 phone column(用户手机号码)的 validate 限制。

6.结论:问题不在 registrations controller 。

7.解法:去除 validate 限制或者给注册页面增加相应的栏位。

8.总结:多遇到坑并尝试去解决总是好的,比如步骤 1 里面 simple form 提示框不在当前页面,这个之前就有遇到过,所以可以以此快速排除是栏位问题。

最新文章

123

最新摄影

微信扫一扫

第七城市微信公众平台