Github中的友好URL

时间:2012-05-21 09:07:39

标签: ruby-on-rails url rails-routing

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/1http://mysite.org/post/1/edit。有更好的方法吗?

5 个答案:

答案 0 :(得分:4)

没有看到他们的代码,我无法确切地告诉你他们是如何做到的,但如果你使用Rails,至少有两个Ruby宝石可以给你类似的结果:

查看Sluggedfriendly_id

答案 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