2012-05-21 2 views
2

Как Github удалось получить дружественные URL-адреса для представления репозиториев пользователей? Для проекта под названием abc от имени пользователя foo, как они работают с URL-адресом вроде: http://github.com/foo/abc. Собирают ли они модель abc для БД из названия в URL-адресе (что звучит необоснованно, поскольку они изменяют названия). Как они передают уникальный идентификатор репозитория abc, который они могут получить и показать в представлении?Дружественные URL-адреса в Github

Причина, по которой я прошу, заключается в том, что я столкнулся с аналогичной проблемой создания более дружественных URL-адресов для просмотра ресурса. Идентификаторы объектов MongoDB довольно длинные и делают URL-адрес ужасным. Есть ли обходной путь? Все учебники, которые демонстрируют CRUD (или REST) ​​URL-адрес для ресурса всегда включают в себя уникальный идентификатор объекта (например, http://mysite.org/post/1 или http://mysite.org/post/1/edit. Есть ли лучший способ сделать это?

ответ

0

я издевался структуру, как это с помощью FriendlyID и Nested Resources.

По существу, используйте дружественный идентификатор, чтобы получить в ваших маршрутах to_param -ish слизняков, а затем настройте вложенные ресурсы. Использование GitHub в качестве примера:

routes.rb

resources :users do 
    resources :repositories 
end 

Тогда в контроллере, скажем, для хранилищ, вы можете проверить наличие params[:user_id] и использовать, чтобы определить пользователя из маршрута. Причина проверить на существование, потому что я сделал что-то вроде (примерно):

/myrepositories/:repository_id 
/:user_id/:repository_id 

Так что мой контроллер делает:

def show 
    @user = params[:user_id] ? User.find(params[:user_id]) : current_user 
end 

Я после этого учебника here, чтобы начать работу с этим же проектом.

4

Не видев их код, я не мог сказать вы, как именно они это делают, но если вы используете Rails есть по крайней мере два Рубиновые камни, которые дадут вам аналогичные результаты:

Взгляни на Slugged и friendly_id

+0

Github использует Rails так, вероятно, делает что-то подобное. – Turnkey

1

http://github.com/foo/abc является уникальным идентификатором хранилища (для этой главной ветки репо). Я бы предположил, что где-то у них есть таблица, которая выглядит так:

repository-id | user-id | project-id 

и просто ищут на основе пользователя и проекта, а не идентификатор репозитория.

Вам нужно будет сделать определенное междоменное сопоставление между внутренними и удобными для пользователя идентификаторами, но вам нужно убедиться, что это сопоставление 1: 1.

1

Посмотрите на это рельсы, наложенные на методы, драгоценные камни и решения общих проблем, которые могут возникнуть при изменении приложения для использования дружественных URL-адресов.

http://railscasts.com/episodes/314-pretty-urls-with-friendlyid?view=asciicast

(хотя Райан Бейтс заслуживает повторений + для этого)