Rails Entwickeln after_sign_in_path_for(Ressource) - Methode nicht funktionieren, wie erwartet
Ich umleiten möchten einen inaktiven Benutzer zu der Registrierung Pfad, um bestimmte Informationen zu sammeln. Hier sind zwei Ansätze, die ich nahm, aber weder ist die Arbeit:
Ich überschrieb das Gerät after_sign_in_path-Methode wie folgt (in application_controller.rb):
def after_sign_in_path_for(resource)
debugger
if(account_active)
return root_path;
else
return edit_user_registration_path(resource)
end
end
Beim hakte ich den code bis zu debugger sehe ich, dass entwickeln, nennt after_sign_in_path_for. Auch die korrekte url erzeugt wird, die durch diesen Aufruf:
(rdb:2) after_sign_in_path_for(resource)
"/users/edit.1"
Jedoch, wenn ich einen Blick in die server-logs, es ist kein Versuch gemacht wird, einen redirect zu "/Benutzer/Bearbeiten.1" unter keinen Umständen.
Ich habe versucht, verschieben Sie das obige Verfahren, um application_helper.rb, session_controller.rb (durch die Erweiterung Entwickeln::SessionController) und session_helper.rb
Das Problem ist, dass das entwickeln tut, rufen Sie diese Methode zum abrufen der url, aber es nie versucht den redirect. Ich habe die web-server-logs, und entwickeln geht direkt in die user_root url.
Hier ist der entsprechende entwickeln, Konfiguration von Routen.rb:
devise_for :users do
resource :registration,
only: [:new, :create, :edit, :update],
path: 'users',
path_names: { new: 'sign_up' },
controller: 'devise/registrations',
as: :user_registration do
get :cancel
end
root :to => "home#index"
end
match '/user' => "products#index", :as => 'user_root'
Irgendwelche Vorschläge, was ich versuchen sollte?
Dank,
Tabrez
Du musst angemeldet sein, um einen Kommentar abzugeben.
Sind Sie sicher, dass Sie umgeleitet werden sollen
/users/edit.1
? Schienen wird das aufgeschnappt, als wenn Sie versuchen, Zugriff auf die1
mime-Typ anstelle von html.Registrierung des Benutzers Pfad muss nicht eine id, denn es gehört immer zu den zurzeit angemeldeten Benutzer. Dies sollte ausreichen:
Auch, indem Sie in der
ApplicationController
ist der richtige Ort. Wenn Sie Ihren eigenen Sitzungen-controller, wieUsers::SessionsController
, die erbt vonDevise::SessionsController
, als es gehen kann, dort auch.Also entweder die
account_active
- Methode macht nicht, was Sie denken, es tut, oder Sie haben geschraubt, bis die Routen-Datei. Versuchen Sie arbeiten mit einem mehr Vanille-Konfiguration in Ihre Routen, um zu sehen, wenn das der Fall ist:PS. als Abschluss einer völlig unabhängigen Seite Hinweis: versuchen Sie bitte, Ruby coding-Konventionen, die wie keine Semikolons, wenn Sie nicht benötigt werden, keine Klammern in
if
Aussagen, 2-Leerzeichen-Einrückungen und keine unnötige return-Anweisungen.Diese möglicherweise nicht auf Sie zutreffen, aber in meiner letzten Verwendung entwickeln + active_admin, lief ich in die gleichen Probleme, die Sie beschreiben. Ich fügte hinzu, die entwickeln überschreiben während meiner Entwicklung rails-server ausgeführt wurde, und davon ausgegangen Schienen/entwickeln würde automatisch abholen die Methode. Anscheinend nicht, da das problem gelöst wurde, wenn ich neu gestartet meinem server.
Scheint es, dass Gerät ist cherry picking diese Methoden aus
ApplicationController
wenn es initialisiert, obwohl ich havent schaute auf die Quelle.