2017-06-24 120 views
0

我有我的路線使用設計問題。設計從重定向路由問題

我修改了我的devise/sessions/new視圖以同時顯示登錄和sign_up表單。

一切工作正常,如果所有字段都填寫正確,我可以在同一視圖(sign_in)中使用任一表單登錄或註冊。但是,如果註冊表格中有錯誤(缺少電子郵件或錯誤的確認密碼,用戶將被重定向到http://0.0.0.0:3000/users的「經典」設計sign_up頁面,而不是停留在users/sign_in頁面,並顯示錯誤。

我的路線如下:

devise_for :users, controllers: { sessions: "users/sessions"} 
as :user do 
    get 'sign_in', :to => 'devise/sessions#new' 
end 

我的登記表有如下聲明:

<%= form_for(resource, as: resource_name, class: "registrtion-form", url: registration_path(resource_name)) do |f| %> 

我的應用助手設置用戶資源:

def resource_name 
    :user 
    end 

    def resource 
    @resource ||= User.new 
    end 

    def devise_mapping 
    @devise_mapping ||= Devise.mappings[:user] 
    end 

回答

1

我想你可以嘗試重寫RegistrationsController.create方法來做到這一點。

class User::RegistrationsController < Devise::RegistrationsController 
    def create 
    build_resource(sign_up_params) 

    resource.save 
    yield resource if block_given? 
    if resource.persisted? 
     if resource.active_for_authentication? 
     set_flash_message! :notice, :signed_up 
     sign_up(resource_name, resource) 
     respond_with resource, location: after_sign_up_path_for(resource) 
     else 
     set_flash_message! :notice, :signed_up_but_#{resource.inactive_message}" 
     expire_data_after_sign_in! 
     respond_with resource, location: after_inactive_sign_up_path_for(resource) 
     end 
    else 
     clean_up_passwords resource 
     set_minimum_password_length 
     # respond_with resource 
     # custom code to redirect to your sign up form if have an error in the registration form. 
     redirect_to ... 
    end 
    end 
end 

希望它有幫助。