2013-07-03 6 views
7

Authentifizierung mit devise und einen separaten Controller (Benutzer), die eine einzige ‚Show‘ Aktion fürBenutzerprofilseiten mit devise - Routing zeigen Aktion

class UsersController < ApplicationController 
#before_filter :authenticate_user! 

    def show 
    @user = User.find(params[:id]) 

    respond_to do |format| 
     format.html # show.html.erb 
     format.xml { render :xml => @user } 
    end 
    end 
end 

Bisher ist die Ansicht (Benutzer/show.html.erb nur) zeigt den Benutzernamen des zugegriffen Profil

<%= @user.username %> 

Routing auch:

resources :users 

ich diese prof möchte ile Seiten sind öffentlich zugänglich, wenn sie einen Link dazu erhalten/die Adresse angegeben haben, aber auch einen Link für einen aktuell angemeldeten Benutzer haben möchten, um sein Profil zu besuchen. Mein Ausschnitt aus meiner Kopfzeile:

<li><%= link_to "Profile", @user %></li> 
<li><%= link_to "Settings", edit_user_registration_path %></li> 
<li><%= link_to "Logout", destroy_user_session_path, method: "delete" %></li> 

Momentan ist @user nur da, um einen Routingfehler zu stoppen. Ich bin mir nicht ganz sicher, wozu ich mich verbinde, habe einige Kombinationen ausprobiert, aber offensichtlich fehlt meinem neuen Geist etwas, was ich noch tun muss. Jede Hilfe wird sehr geschätzt!

(Rails 4, Rubin 2.0.0)

Exkurs würde ich auch gerne, schließlich, den Link zu einer Profilseite erlaubt die ID + Benutzername im Format angezeigt werden: # {id} - # {Benutzername} (anstatt nur Benutzer/1 -> Benutzer/1-bbvoncrumb zu sein).

+0

Sie wollen also auf Benutzerseite verlinken, oder? –

Antwort

14

Sie müssen nur die User Instanz als Parameter an link_to übergeben, wenn Sie möchten, dass sie auf die Seite show des angegebenen Benutzers verweist. Also, wenn Sie zur Zeit verknüpfen möchten in Devise in Benutzer-Profile angemeldet, müssen Sie nur:

<li><%= link_to "Profile", current_user %></li> 
+3

Oh Mann. Ich sollte mich erschießen. Ich bin mir nicht sicher, warum ich das vermisst habe und danke für die klare Antwort. Sehr geschätzt! – bvcm

3

Wenn Sie die aktuelle eingeloggte Benutzer sehen wollen Profil stellen Sie sicher, Sie angemeldet sind

hinzufügen. before_filter :authenticate_user! in Benutzer-Controller.

dann in Kopf Link <li><%= link_to "Profile", current_user %></li>

2

Ich denke, das Ihnen helfen kann.

In „Rails Führung von Außen in“

Zum Beispiel würden Sie/profile wie immer das Profil der aktuell angemeldeten Benutzer zu zeigen. In diesem Fall können Sie eine singuläre Ressource verwenden, um die Aktion show/ map/profile (statt/profile /: id) anzuzeigen.

match "profile" => "users#show", :as => 'profile' 

<li><%= link_to "Profile", profile_path %></li> 

für private Profilseite.

Da die öffentliche Profilseite sich von der privaten Profilseite unterscheidet, würde ich einen Profil-Controller erstellen, um öffentliche Profile anzuzeigen.