2012-04-12 12 views
0

Ich benutze Devise und Cancan mit Rails 3.2.1 und ich habe ein ungewöhnliches Problem, das ich weiß, kann refaktoriert und vereinfacht werden, aber nach viel Suchen, stecke ich fest.Wie kann ich mich anmelden und first_name mit last_name anzeigen?

Ich habe first_name und last_name Felder im Benutzermodell und habe angezeigt erfolgreich den vollständigen Namen des Benutzers in der Benutzer/show.html.erb Ansicht mit diesem Code:

<%= @user.first_name + " " + @user.last_name %> 

Und ich war erfolgreich Anzeige ein Link zu dem Show-Seite des Benutzers in der Kopfzeile mit:

<% if user_signed_in? %> 
    <li><%= link_to @user.first_name + " " + @user.last_name, current_user %></li> 
<% end %> 

Aber, und ich kann diese ein nicht herausfinden, nachdem sie auf einem anderen Teil der App arbeiten begannen die Header mir eine nicht definierte Methode Fehlermeldung geben ...

In jedem Fall weiß ich, dass es eine viel bessere Möglichkeit gibt, Benutzernamen zu definieren und zu verwenden, und ich habe einige Dinge ausprobiert, wie das Hinzufügen einer Namensmethode zum Benutzermodell, aber wie Sie aus diesem Beitrag deutlich sehen können Ich bin ein Anfänger und konnte diese Arbeit nicht machen.

Bitte lassen Sie mich wissen, wenn Sie Ideen haben, wie Sie am besten mit Benutzernamen in einer Anwendung wie dieser arbeiten.

+0

Edit: die Kopfzeile funktioniert gut, wenn ich Benutzer/show.html.erb durchsuchen, aber gibt einen Fehler beim Durchsuchen der Homepage –

+0

Was ist der Fehler? Könnten Sie es zu Ihrer Frage hinzufügen? – Christian

Antwort

3

Wo definieren Sie @user? Ich wette, dass es in Ihrer UsersController-Show-Aktion ist, was bedeutet, dass es nur für Ihre Kopfzeile in dieser Aktion definiert ist.

Versuchen Sie Header-Code mit diesem ersetzen:

<% if user_signed_in? %> 
    <li><%= link_to current_user.first_name + " " + current_user.last_name, current_user %></li> 
<% end %> 

Der Trick ist, dass Devise macht current_user immer zur Verfügung, wenn der Benutzer angemeldet ist, Sie müssen nicht über die Einrichtung eines @user Instanzvariable kümmern..

+0

Danke. Gibt es auch eine Möglichkeit zum Refactoring, so dass ich nur current_user.name verwenden kann? –

+0

'current_user' ist eine Instanz Ihres 'User'-Modells. Fügen Sie einfach eine Methode zu diesem Modell mit dem Namen 'name' hinzu, die die verkettete Zeichenfolge zurückgibt, z. B .:' def name; erster_name + '' + letzter_name; Ende' –

+1

Danke für das Hinweisen auf das Häkchen! Ich habe weiter aufgeru- fen, wurde aber vom System verhindert, bis ich 15 Punkte habe. –

Verwandte Themen