2017-04-05 37 views
0

我創建了一個新的rails項目,只有一個主頁的生成控制器來測試它。爲什麼設計將sign_up錯誤重定向到不同的頁面?

我設計的模型是User,所以註冊頁面是http://localhost:3000/users/sign_up

如果我觸發錯誤,例如,提交不給密碼的形式,我重定向到http://localhost:3000/users

我怎麼能留在http://localhost:3000/users/sign_up犯錯誤後?

我讀this questionthe only answer建議在控制器中使用redirect_to :back

的問題是,我不重寫控制器。如果壓倒一切是解決問題的唯一方法,請解釋它應該如何。

這是我routes.rb

Rails.application.routes.draw do 
    root to: "home#index" 
    get 'home/index' 
    devise_for :users 
end 

HereDevise::RegistrationsController的源代碼。我應該如何覆蓋newcreate以實現我所需要的功能?

+0

是軌道的默認行爲。當發生任何錯誤時,它將再次呈現該表單。所以表單的所有值都保持不變。如果您使用重定向回來,併發生任何錯誤,它會給新的形式。表單的所有值將被破壞 – Vishal

+0

它再次呈現表單,這是正確的。問題是URL從'/ users/sign_up'改變爲'/ users'。 – Wit

+0

你可以發佈特定於你的應用程序中的設計路線(和控制器/操作)嗎? – BigJ

回答

1

我強烈建議你不要這樣做。 Rails應用程序的默認行爲(遵循路徑命名約定)就是您描述的方式。但是,如果你真的需要這個,那麼這就是如何。

首先,去你routes.rb和:

devise_scope :user do 
    post 'users/sign_up', to: 'devise/registrations#create' 
end 

編輯

然後,生成設計視圖,以便您可以覆蓋的形式的默認行爲。

rails g devise:views 

然後,打開你的app/views/devise/registrations/new.html文件並編輯form_for線,所以它看起來是這樣的:

<%= form_for(resource, as: resource_name, url: users_sign_up_path) do |f| %> 
+0

看看我的編輯 – ajeferson

+0

我會試試看,並讓你知道。 – Wit

相關問題