0

我通过在继承的 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,这是不受欢迎的行为。

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

4

2 回答 2

1

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

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

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

post 'signup' => 'registrations#create', as: :user_registration
于 2012-10-26T10:28:05.953 回答
0

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

于 2012-10-24T20:58:25.093 回答