Ich verwende Devise zusammen mit CanCan/Rolify für die Authentifizierung für meine Rails-Anwendung, und ich habe eine harte Zeit zu verstehen, wie Devise Methoden passieren zu einem Namensraum Controller.undefiniert lokale Variable oder Methode ‚current_user‘ für benannte Steuer
Ich verwende einen Standard users
Modell und Controller für den Hauptteil meiner App, alles auf dieser Seite funktioniert gut und gut. Ich habe es jedoch so eingerichtet, dass wenn ein Account mit einem bestimmten role
(der nach der Registrierung bestimmt wird) sich mit der Hauptanmeldeseite anmeldet, wird er sie zu namespaced Views und Controllern umleiten.
Lassen Sie uns sagen, dass user_id: 3
anmeldet und auf 0.0.0.0/external/dashboard
umgeleitet, ich current_user
Methode auf der dashboard
Seite nach Umleitung aufrufen Devise des und gibt die richtigen Informationen. Allerdings, wenn ich einen link_to
für diesen Benutzer auf der Lage sein, sein Profil bearbeiten bei 0.0.0.0/external/users/3/edit
ich die folgende Fehlermeldung:
Started GET "/external/users/3/edit" for 127.0.0.1 at 2017-08-31 21:40:59 -0400
ActionController::RoutingError (undefined local variable or method `current_user' for External::UsersController:Class)
routes
devise_for :users, controllers: { confirmations: 'confirmations', registrations: 'registrations' }
# External routes
namespace :external do
resources :properties, :clients, :orders, :deeds, :mortgages, :users, :owners, :dashboard
end
external/dashboard view
<%= user_name_helper(current_user) %>
user_name_helper
(produziert Link Benutzer bearbeiten)
def user_name_helper(user)
if user.name.blank?
link_to "Update your profile here.", edit_external_user_path(user)
else
"Hello, #{user.name}"
end
end
Fehler passiert, wenn ich den Link von diesem Helfer erzeugt klicken.
Aber <%= link_to fa_icon("sign-out", text: "Logout"), destroy_user_session_path, method: :delete %>
funktioniert gut von 0.0.0.0/external/dashboard
.
So bin ich verwirrt, warum ich current_user
in der Ansicht für die External::DashboardController
aufrufen kann, aber nicht innerhalb der External::UsersController
anrufen kann. Alle namespaced Controller erben direkt von ApplicationController
und ich möchte nur eine einzige users model
verwenden. Ich habe eine Menge verschiedener Artikel durchforstet, aber ich kann keine Antwort mit einer ähnlichen Konfiguration finden wie meine, also kann mir jeder erklären, was ich falsch machen könnte und wie ich das schaffen könnte die Möglichkeit zu haben, andere Devise methods
in meinen Namespaced-Ansichten zu verwenden? Danke im Voraus.