2010-03-12 2 views
5

Как использовать дружественные URL-адреса в приложении Rails? Все, что мне нужно сделать доступным следующий формат URL-адресКак использовать дружественный идентификатор в Rails, например mysite.com/[USERNAME]

mysite.com/company1 mysite.com/user123 mysite.com/user1234 mysite.com/newton.garcia mysite.com/company-name

Может ли кто-нибудь помочь?

ответ

0

Для этого вы можете использовать драгоценный камень под названием SubDomain-Fu. Смотрите это screen cast для более подробной информации.

+0

Это лучший способ сделать это? Я хочу сделать доступными уникальные URL-адреса USER, такие как Facebook. facebook.com/newtongarcia facebook.com/username1 facebook.com/username2 – newx

+0

Экран, связанный в моем ответе, имеет аналогичный вариант использования как ваш. Смотрите его для более подробной информации. –

4

Я уже задаю этот вопрос на Quora ..

http://www.quora.com/How-does-Quora-rewrite-their-urls

Для кого действительно заинтересован реализовать Quora/Facebook URL, как. Heres наконечник в Rails3:

Составьте таблицу под названием slugs:

# slug | model_id | model 
# =========================== 
# simple data: 
# one | 2222 | post 
# two | 1111 | user 
# six | 5432 | comment 

Сейчас в routes.rb добавить эту строку в нижней части:

match '/:id', :to => proc { |env| 
    id = env["action_dispatch.request.path_parameters"][:id] 
    model = Slug.find_by_slug(id).model 
    controller = [model.pluralize.camelize,"Controller"].join.constantize 
    controller.action("show").call(env) 
}, :as => :slugable 

так, если мы идем к /one на маршрутах он переводится как:

id: one 
so from the slugs table, 
model: post 
and the route will point to "posts#show" 

Теперь в действии show во всех контроллерах

@something = Model.find_by_slug(params[:id]) 
Смежные вопросы