使用自定义设计路线时,devise不会重定向到after_sign_up_path

时间:2012-10-22 09:30:58

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

我通过在继承的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

具体来说,帖子'注册'=&gt; '设计/注册#create',如下:user_registration行混乱了。如果那不存在,那就行了。但是,如果不存在,那么当注册因验证错误而失败时,URL默认为/ users而不是/ signup,这是一种不受欢迎的行为。

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

2 个答案:

答案 0 :(得分:1)

自定义路由的问题在于您将指向Devise控制器:

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

显然这不起作用。而是指向您自己的控制器:

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

答案 1 :(得分:0)

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