Github如何设法获得友好的URL来代表用户的回购?对于名为abc
的用户名为foo
的项目,他们如何处理以下网址:http://github.com/foo/abc
。他们是否从URL中的标题获取数据库的abc
模型(这在修改标题时听起来不合理)。他们如何转移他们可以在视图中获取并显示的abc
仓库的唯一ID?
我问的原因是我面临着创建更友好的URL以查看资源的类似问题。 MongoDB的对象ID很长,使URL看起来很可怕。有解决方法吗?所有演示资源的CRUD(或REST)URL的教程都包含对象的唯一ID(例如http://mysite.org/post/1
或http://mysite.org/post/1/edit
。有更好的方法吗?
答案 0 :(得分:4)
没有看到他们的代码,我无法确切地告诉你他们是如何做到的,但如果你使用Rails,至少有两个Ruby宝石可以给你类似的结果:
答案 1 :(得分:1)
http://github.com/foo/abc是一个唯一的存储库标识符(对于该repo的主分支)。我假设他们有一个看起来像这样的桌子:
repository-id | user-id | project-id
并且只是根据用户和项目而不是存储库ID来查找。
您需要在内部和用户友好的ID之间进行特定于域的映射,但是您需要确保它是1:1映射。
答案 2 :(得分:1)
在修改应用程序以使用友好网址时,请参阅此方法,宝石和解决方案,以解决常见问题。
http://railscasts.com/episodes/314-pretty-urls-with-friendlyid?view=asciicast
(虽然Ryan Bates应该得到代表+)
答案 3 :(得分:0)
我使用FriendlyID和Nested Resources模拟了这样的结构。
基本上,使用友好ID来获取路由中的to_param
- ish slugs,然后设置嵌套资源。以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 :(得分:0)
如果Web服务器执行此操作(例如Apache),则称为 URL重写;当Web应用程序框架(例如Ruby on Rails)中发生路由时,这称为 URL )。
http://www.sinatrarb.com/intro#Routes
http://httpd.apache.org/docs/current/mod/mod_rewrite.html