在用户通过设计的可确认确认其帐户后,我试图将用户路由到自定义欢迎页面。自定义页面位于/districts/setup/,可通过 Districts_setup_path 访问。
为此,我添加了自定义路线,
devise_for :users, :controllers => { :registrations => 'registrations', :confirmations => 'confirmations' }
并创建了我自己的 Controller 。然后我不得不重载confirmations_controller.rb,现在有:
(app/controllers/confirmations_controller.rb)
类 ConfirmationsController |设计::确认 Controller
# GET/resource/confirmation?confirmation_token=abcdef
定义显示
self.resource = resource_class.confirm_by_token(params[:confirmation_token])
如果resource.errors.empty?
set_flash_message(:notice, :confirmed) if is_navigational_format?
登录(资源名称,资源)
重定向到区设置路径
别的
render_with_scope :新
# 不是:
# respond_with_navigational(resource.errors, :status => :unprocessable_entity){
结尾
结尾
结尾
这很好用,但我很紧张,因为我没有以最理想和最稳健的方式来做这件事。特别是,我刚刚删除了我真的不明白的 respond_with_navigational( ... ) 行。
我希望将这一切都写在 Devise wiki 的操作指南中,我只是在寻找对 Rails 相当新的反馈,甚至对 Devise/engines/warden 来说更新。
最佳答案
查看 Devise 的 ConfirmationsController,您可以发现 protected 方法 after_confirmation_path_for(resource_name, resource)
.覆盖它(而不是整个 Action )将以更少的努力产生相同的结果。
一般来说,重写 Devise 的 Controller 没有问题,因为它们代表了并不总是适合应用程序需求的默认行为。话虽如此,在覆盖 Devise 的代码之前,您必须采取一些措施:
关于ruby-on-rails-3 - Rails3 为可确认模块设计自定义路由,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5774342/