2010-02-16 27 views
11

Twitter profil sayfasına kopyalamak ve kullanıcı adı "http://www.my-app.com/username" ile bir URL’ye sahip olmak istiyorum ve bunu adres çubuğuna el ile yazıp sayfama bağlanamadığım profil sayfasına gidiyorum. özel URL.rayları url ile kişiselleştirin

Sorunun yolları olduğunu düşünüyorum - burada benim routes.rb içinde kod Ayrıca

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

, ben Question ve Answer modelleri var ve ben şöyle özelleştirilmiş URL ile bunlara bağlamak istediğiniz:

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

+0

Daha iyi çerçevelemenize gerek yok, sadece daha özlü olun –

cevap

12

rotanız ile yanlış bir şey yok. Diğer tüm rotaları tanımladıktan sonra en sonunda tanımlamayı unutmayın. Ayrıca RESTful rotalarını kullanmanızı ve yalnızca daha iyi görünen URL'lerin adlandırılmış rotaları kullanmasını istiyorsanız tavsiye ederim. map.connect kullanmayın. İşte bazı good reading about Rails routes. İşte

bu nasıl görüneceği:

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

map.resources :users 

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

Sadece bir taslak sen uzatabilirsiniz.

4

URL'ler oluşturmak için kullanıcı modeliniz için (read here) to_param yöntem tanımlamanız gerekir.

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

Ben

portfolio.user.name Görünüm bölümünde bu

gibi kullandık: id => portföy)%>

ve rout.rb

haritası . show_portfolio "portfolyolar /: kullanıcı adı",: action => 'show_portfolio',: controller => 'portfolyolar'

1

Bu soruların eski olduğunu biliyorum ama yardımcı olacak Meone.

Aşağıdakileri deneyebilirsiniz. Bir raylar 4 projesinde kullandım ve her şey harika çalışıyor. as: :admin'un nedeninin de bu kapsamın dışında bir resources posts vardı. Yardımcı çağrılara bir admin ekleyecektir, ör. admin_posts_path

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