2010-02-16 14 views
11

Quiero copiar la página de perfil de twitter y tener una URL con un nombre de usuario "http://www.my-app.com/username" y aunque puedo escribirla manualmente en la barra de direcciones y navegar a la página de perfil no puedo enlazar con URL personalizada.personalizar la URL de los rieles con nombre de usuario

Creo que el problema está en las rutas - aquí está el código en mi routes.rb

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

Además, tengo Question y Answer modelos y quiero enlazar a ellos con la URL personalizada de este modo:

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

+0

No necesita enmarcarlo mejor, solo sea más conciso –

Respuesta

12

No hay nada malo con su ruta. Solo recuerde definirlo al final, después de definir todas las demás rutas. También recomendaría usar rutas RESTful y solo si desea tener URLs más atractivas use rutas con nombre. No use map.connect. Aquí hay algunos good reading about Rails routes.

Así es como esto podría parecer:

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

map.resources :users 

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

Sólo un proyecto se puede ampliar.

4

Para crear urls necesita definir el método to_param para su modelo de usuario (read here).

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

he utilizado como esto

En Ver parte

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

y en rout.rb mapa

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

1

Sé que esta pregunta es antigua pero me ayudará mucho Meone.

Puede intentar lo siguiente. Lo he usado en un proyecto de rails 4 y todo parece estar funcionando muy bien. La razón para el as: :admin es que también tuve un resources posts fuera de este alcance. Agregará un admin a las llamadas de ayudantes, por ejemplo. admin_posts_path

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