【问题标题】:devise won't redirect to after_sign_up_path when using customized devise routes使用自定义设计路线时,设计不会重定向到 after_sign_up_path
【发布时间】:2012-10-22 09:30:57
【问题描述】:

我通过在继承的 registrations_controller 中定义 after_sign_up_path_for(resource) 来调用它:

class RegistrationsController < Devise::RegistrationsController

  protected

  def after_sign_up_path_for(resource)
    new_user_profile_path(resource)
  end

end

如果我不自定义路由,此重定向可以正常工作。但是,当我这样做时,它不再起作用。我的路线文件有:

devise_for :users, skip: [:sessions], controllers: { registrations: "registrations" }

devise_scope :user do
  get 'signin' => 'devise/sessions#new', as: :new_user_session
  post 'signin' => 'devise/sessions#create', as: :user_session
  delete 'signout' => 'devise/sessions#destroy', as: :destroy_user_session
  get 'signup' => 'devise/registrations#new', as: :new_user_registration
  post 'signup' => 'devise/registrations#create', as: :user_registration
  root to: 'pages#home'
end

具体来说,post 'signup' => 'devise/registrations#create', as: :user_registration 行把事情搞砸了。如果那不存在,它工作正常。但是,如果不存在,那么当由于验证错误导致注册失败时,URL 默认为 /users 而不是 /signup,这是不受欢迎的行为。

有人知道这是我做错了什么还是设计中有错误?

【问题讨论】:

    标签: ruby-on-rails devise ruby-on-rails-3.2


    【解决方案1】:

    您的自定义路由的问题是您被指向设计控制器:

    post 'signup' => 'devise/registrations#create', as: :user_registration
    

    这显然行不通。改为指向您自己的控制器:

    post 'signup' => 'registrations#create', as: :user_registration
    

    【讨论】:

    • 如此明显,现在我看到了,这让我觉得自己很愚蠢。感谢 Jose 的时间和精力......
    【解决方案2】:

    只是简单地看一下你提供的代码,我不认为你想要的路由是 new_user_profile_path。您可能需要 user_profile_path,您可以运行 rake 路由并将输出粘贴到此处吗?

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-10-10
      • 2016-01-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多