2012-10-22 38 views
0

我調用after_sign_up_path_for(資源)時,通過在繼承registrations_controller定義它after_sign_up_path:如果我不定製路線色器件不會重定向使用自定義色器件路線

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 

具體來說,交 '註冊'=> '設計/註冊#創建',因爲:user_registration線弄亂的東西了。如果那不在那裏,它可以正常工作。但是,如果不存在,那麼當註冊由於驗證錯誤而失敗時,URL將默認爲/ users而不是/ signup,這是一種不希望的行爲。

任何人都知道這是我做錯了什麼,或者如果有設計錯誤?

回答

1

的問題與您的自定義路線是,你指着身後制定控制器:

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

這顯然是行不通的。指向你自己的控制器,而不是:

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

現在很明顯,我看到它,它讓我感到很蠢。感謝何塞爲您的時間和精力... – kindofgreat

0

只是簡單的看你提供的代碼,我不認爲你想要的路由是new_user_profile_path。你可能想要user_profile_path,你可以運行rake路由並粘貼輸出嗎?