2017-04-05 3 views
0

Ich habe neue Rails-Projekt mit nur einem generierten Controller für eine Homepage erstellt, um dies zu testen.Warum leitet Devise sign_up-Fehler auf eine andere Seite um?

Ich bin ein Modell ist User, so die Anmeldeseite ist http://localhost:3000/users/sign_up.

Wenn ich einen Fehler auslösen, zum Beispiel das Formular ohne Angabe von Passwort, werde ich auf http://localhost:3000/users weitergeleitet.

Wie kann ich auf http://localhost:3000/users/sign_up bleiben, nachdem ich Fehler gemacht habe?

Ich lese this question und the only answer schlägt vor, redirect_to :back in der Steuerung zu verwenden.

Das Problem ist, dass ich den Controller nicht überschreibe. Wenn das Überschreiben die einzige Lösung ist, erläutern Sie bitte, wie es sein sollte.

Das ist mein routes.rb

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

Here der Quellcode Devise::RegistrationsController ist. Wie sollte ich new oder create überschreiben, um zu erreichen, was ich brauche?

+0

es ist Standardverhalten von Schienen. Tritt ein Fehler auf, wird das Formular erneut gerendert. also bleiben alle Werte der Form gleich. Wenn Sie Redirect zurück verwenden und ein Fehler auftritt, wird ein neues Formular angezeigt. Alle Werte des Formulars werden zerstört – Vishal

+0

Es macht das Formular wieder, das ist richtig. Das Problem ist, dass die URL von '/ users/sign_up' zu'/users' wechselt. – Wit

+0

Können Sie die Routen (und Controller/Aktionen), die für die Entwicklung in Ihrer App spezifisch sind, veröffentlichen? – BigJ

Antwort

1

Ich empfehle dringend, dass Sie dies nicht tun. Das Standardverhalten von Rails-Anwendungen (nach den Routennamenskonventionen) ist so beschrieben. Aber, wenn Sie wirklich dazu brauchen, hier ist wie.

Zuerst gehen Sie zu Ihrem routes.rb und:

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

EDIT

Dann erzeugen die Ansichten entwickeln, so dass Sie das Standardverhalten der Formulare überschreiben können.

rails g devise:views 

Dann öffnen Sie Ihre app/views/devise/registrations/new.html Datei und bearbeiten Sie die form_for Linie, so dass es wie folgt aussieht:

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

Check out my edit – ajeferson

+0

Ich werde es ausprobieren und Sie wissen lassen. – Wit

Verwandte Themen