2017-04-05 13 views
0

これをテストするためにホームページ用に生成されたコントローラだけで新しいrailsプロジェクトを作成しました。Deviseがsign_upエラーを別のページにリダイレクトするのはなぜですか?

私が考案したモデルはUserなので、サインアップページはhttp://localhost:3000/users/sign_upです。

パスワードを入力せずにフォームを送信するなどのエラーが発生した場合は、http://localhost:3000/usersにリダイレクトされます。

http://localhost:3000/users/sign_upエラーを間違えた後にはどうすればいいですか?

私はthis questionを読んでおり、the 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のソースコードです。私が必要とするものを達成するために、newまたはcreateをどのように上書きする必要がありますか?

+0

それはレールのデフォルトの動作です。何らかのエラーが発生すると、再びフォームがレンダリングされます。フォームのすべての値は同じままです。リダイレクトバックを使用してエラーが発生すると、新しいフォームが作成されます。フォームのすべての値は破棄されます – Vishal

+0

フォームを再度レンダリングしますが、それは正しいです。問題は '/ users/sign_up'から'/users'へのurlの変更です。 – Wit

+0

アプリ内で開発するルート(およびコントローラ/アクション)を投稿できますか? – BigJ

答えて

1

このようにしないことを強くお勧めします。 Railsアプリケーションのデフォルトの動作(ルート命名規則に従って)は、あなたが記述した方法です。しかし、もしあなたが本当にこれにする必要があれば、ここでどうしますか。あなたがフォームのデフォルトの動作をオーバーライドすることができるように工夫ビューを生成し、その後

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

EDIT

まず、あなたのroutes.rbとに行きます。

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

関連する問題