2012-05-21 120 views
2

Github如何设法获得用于表示用户回购的友好URL?对于名为abc的用户名为foo的项目,他们如何解决URL:http://github.com/foo/abc。他们是否从URL中的标题获取DB的abc模型(这听起来不合理,因为它们正在修改标题)。他们如何转让他们可以在视图中获取并显示的abc回购的唯一ID?Github中的友好网址

我问的原因是我面临类似的问题,即创建友好的URL来查看资源。 MongoDB的对象ID非常长,使URL看起来很可怕。有没有解决方法?所有这一切表明CRUD(或REST)的网址为资源教程总是包含对象的唯一ID(如http://mysite.org/post/1http://mysite.org/post/1/edit。有没有更好的办法做到这一点?

回答

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

由于没有看到他们的代码,我不知道你究竟他们是如何做到这一点,但如果你用Rails有至少两个红宝石宝石会给你类似的结果:

Slugged看一看,friendly_id

+0

Github上使用Rails的那么容易做类似的事情。 – Turnkey

1

http://github.com/foo/abc是一个独特的库标识(对于那个回购的主分支)我假设他们有一张桌子,看起来像这样:

repository-id | user-id | project-id 

并且只是基于用户和项目而不是仓库标识查找。

你需要在内部和用户友好的ID之间做一些特定领域的映射,但是你需要确保它是1:1的映射。