2010-05-04 14 views
5

Mi piacerebbe creare un percorso di rails per modificare il profilo di un utente.Percorso Rails dipendente dall'attuale utente

Invece di dover utilizzare/utenti /: id/modifica, mi piacerebbe avere un URL del tipo/edit_profile

E 'possibile creare un percorso dinamico che trasforma/edit_profile in/utenti/{user di id}/modifica, o dovrei fare qualcosa in un controller o?

+0

Penso che si tratti di un percorso denominato route/controller. –

+0

è possibile che tu elabori un po 'su cosa intendi con questo? Grazie! – Lowgain

risposta

4

si potrebbe desiderare di creare un controller separato per questo compito, ma si potrebbe al in modo da continuare a utilizzare users_controller e solo verificare se v'è un insieme params[:id]:

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

Ma si deve notare che /users normalmente rotte per l'azione index e non show se avete ancora il percorso map.resources :users. Ma si potrebbe impostare un diverso chiamato percorso singolare che:

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

In questo modo /users sarebbe elencare tutti gli utenti, /users/:id avrebbe mostrato qualsiasi utente e /profile avrebbe mostrato il show attualmente connesso nella pagina di utenti. Per modificare il tuo profilo, chiameresti "/ profile/edit".

+0

grazie! Ho utilizzato una struttura URL diversa, ma sono riuscito a utilizzare la risposta per ottenere ciò che volevo! – Lowgain

3

Poiché un percorso e un controller hanno due scopi diversi, sono necessari entrambi.

Per il controller, supponendo che si sta memorizzare l'id utente in una sessione, si può solo avere il vostro metodo di modifica fare qualcosa di simile:

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

poi hanno un percorso che sembra qualcosa di simile:

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

questo itinerario vi darebbe un percorso di nome chiamato edit_profile_path

0

risposta di Tomas Markauskas potrebbe funzionare, ma qui è la risposta alla tua domanda dalla Guida Rails:

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

Così, quando qualcuno va a www.yoursite.com/edit_profile, sarà percorso a www.yoursite .com/utenti/modificare.

Poi, nel controller è possibile accedere l'utente con

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

Supponendo che si imposta variabile di sessione quando qualcuno accede. Inoltre, non dimenticare di controllare se sono registrati. Questo sarà lavorare se si utilizza il routing di risorse (il valore predefinito di Rails) o meno.

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

0

rendere il percorso come

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

Come spiegato in questa sezione collegamento 'Il modo più duro':

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

L'url sarà

/users/edit_profile 

Poiché l'ID non è più nell'URL, dobbiamo cambiare un po 'il codice.

class User < ActiveRecord::Base 
    before_create :create_slug 

    def to_param 
    slug 
    end 

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

Quando un utente viene creato, la versione URL-friendly del titolo viene archiviata nel database, nella colonna slug.

Per una migliore comprensione leggere sul link qui sotto

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

0

scrittura in qualsiasi controler casa.

set_roots def

if current_user  
    redirect_to dashboard_home_index_path 
else  
    redirect_to home_index_path 
end  

fine

nel file di routes.rb

root: a =>

match 'casa # set_roots' "/ find_roots" => "casa #set_roots "

Problemi correlati