2010-02-16 3 views
11

Voglio copiare la pagina del profilo di Twitter e avere un URL con un nome utente "http://www.my-app.com/username" e mentre posso digitare manualmente questo nella barra degli indirizzi e navigare alla pagina del profilo Non riesco a collegarmi al URL personalizzato.personalizza l'URL dei rails con nome utente

Credo che il problema è nelle rotte - ecco il codice nel mio routes.rb

map.connect '/:username', :controller => 'users', :action => 'show' 

Inoltre, ho Question e Answer modelli e voglio collegare a loro con l'URL personalizzato in questo modo:

http://www.my-app.com/username/question/answer/2210

+0

Non è necessario inquadrarlo meglio, solo essere più conciso –

risposta

12

Non c'è niente di sbagliato con il percorso. Ricorda solo di definirlo alla fine, dopo aver definito tutti gli altri percorsi. Vorrei anche raccomandare l'utilizzo delle rotte RESTful e solo se si desidera avere URL di migliore qualità utilizzare percorsi denominati. Non utilizzare map.connect. Ecco alcuni good reading about Rails routes.

Ecco come potrebbe apparire:

map.resources :questions, :path_prefix => '/:username' do |question| 
    question.resources :answers 
end 

map.resources :users 

map.user '/:username', :controller => 'users', :action => 'show' 

Solo un progetto si può estendere.

4

Per creare URL è necessario definire il metodo to_param per il modello utente (read here).

class User < ActiveRecord::Base 
    def to_param 
    username 
    end 
end 
0

Ho usato come questo

In Visualizza Parte

portfolio.user.name,: id => portafoglio)%>

e in rout.rb

mappa. show_portfolio "portfolios /: username",: action => 'show_portfolio',: controller => 'portafogli'

1

So che questa domanda è vecchia ma aiuterà in questo modo Meone.

Si potrebbe provare il seguito. L'ho usato in un progetto di rail 4 e tutto sembra funzionare alla grande. Il motivo per il as: :admin è che ho anche un resources posts al di fuori di questo ambito. Aggiungerà un numero admin alle chiamate di supporto, ad es. admin_posts_path

scope ":username", module: 'admin', as: :admin do 
    get '', to: 'profiles#show' 
    resources :posts 
end