2010-05-04 16 views
5

Ich möchte eine Rails-Route zum Bearbeiten eines Benutzerprofils erstellen.Rails-Route abhängig vom aktuellen Benutzer

Anstelle von/Benutzer verwenden /: id/bearbeiten, würde Ich mag eine URL haben, wie/edit_profile

Ist es möglich, eine dynamische Route zu erstellen, die/edit_profile verwandelt sich in/users/{Benutzer id}/edit, oder soll ich etwas in einem Controller machen oder?

+0

Ich denke, das ist ein named Route/Controller-Job. –

+0

ist es möglich, dass Sie ein wenig darauf eingehen, was Sie damit meinen? Vielen Dank! – Lowgain

Antwort

4

Sie nennen könnte einen separaten Controller für diese Aufgabe erstellen möchten, aber man konnte al so weiter users_controller verwenden und einfach überprüfen, ob es eine ist params[:id] Satz:

def edit 
    if params[:id] 
    @user = User.find(params[:id]) 
    else 
    @user = current_user 
    end 
end 

Aber Sie sollten beachten, dass /users normalerweise Wege zur index Aktion und nicht show wenn Sie immer noch die map.resources :users Route haben. Aber man könnte eine anders genannt singulären Weg für das ein:

map.resources :users 
map.resource :profile, :controller => "users" 

Auf diese Weise /users alle Benutzer aufzulisten, würde /users/:id jeden Benutzer anzeigen und /profile würde zeigen die show die zur Zeit in Benutzer-Seite angemeldet. Um Ihr eigenes Profil zu bearbeiten, rufen Sie '/ profile/edit' auf.

+0

danke! Ich verwendete eine andere URL-Struktur, aber ich konnte Ihre Antwort verwenden, um zu erreichen, was ich wollte! – Lowgain

3

Da eine Route und ein Controller zwei verschiedene Zwecke erfüllen, benötigen Sie beide.

Für die Steuerung, vorausgesetzt, Sie die Benutzer-ID in einer Sitzung sind zu speichern, könnten Sie Ihre bearbeiten Methode etwas tun, wie haben gerade:

def edit 
    @user = User.find(session[:user_id]) 
end 

Dann eine Route, die etwa so aussieht:

map.edit_profile "edit_profile", :controller => "users", :action => "edit" 

Diese Route würde Ihnen eine benannte Route edit_profile_path

0

Tomas Markauskas Antwort könnte funktionieren, aber hier ist die Antwort auf Ihre Frage vom Rails Guide:

get 'edit_profile', to: 'users#edit' 

Also, wenn jemand auf www.yoursite.com/edit_profile geht, wird es den Weg nach www.yoursite .com/Benutzer/bearbeiten.

Dann in Ihrem Controller können Sie den Benutzer Zugriff mit

@user = User.find(session[:current_user_id]) 

Angenommen, Sie, dass die Session-Variable gesetzt, wenn jemand anmeldet. Vergessen Sie auch nicht zu überprüfen, ob sie angemeldet sind. Dies wird funktionieren, wenn Sie das findige Routing (Rails-Standard) verwenden oder nicht.

Quelle: http://guides.rubyonrails.org/routing.html

0

die Strecke machen als

get '/users/:id/edit', to: 'users#edit', as: 'edit_profile' 

Wie in diesem Streckenabschnitt 'auf die harte Tour':

http://augustl.com/blog/2009/styling_rails_urls/

Die URL

sein wird

Da die ID nicht mehr in der URL ist, müssen wir den Code ein wenig ändern.

class User < ActiveRecord::Base 
    before_create :create_slug 

    def to_param 
    slug 
    end 

    def create_slug 
    self.slug = self.title.parameterize 
    end 
end 

Wenn ein Benutzer erstellt wird, wird die URL Version des Titels in der Datenbank, in der Slug-Spalte gespeichert.

Zum besseren Verständnis lesen Sie den folgenden Link:

http://blog.teamtreehouse.com/creating-vanity-urls-in-rails

0

schreiben Sie es in jedem Haus Controler.

def set_roots

if current_user  
    redirect_to dashboard_home_index_path 
else  
    redirect_to home_index_path 
end  

Ende

in routes.rb Datei

root: to => 'Haus # set_roots'

Spiel "/ find_roots" => „home #set_roots "

Verwandte Themen