Если совершить это RESTful контроллер, который использует: ша вместо идентификатора для поиска записей. Вы можете сделать это вместо того, чтобы:
map.resource :commits, :path_prefix => ':user/:repo', :as => 'commit'
Это создаст стандартные RESTful маршруты, которые выглядят как http://yoursite.tld/:user/:repo/commit/:id
Опять же, если вы никогда не будете переводить часть идентификатора в URL для фиксации идентификатора, то есть нет причины, по которой вы не можете использовать его как значение: sha.
пример:
class CommitController < ApplicationController
def show
@commit = Commit.find(:first, :conditions => {:sha => params[:id]})
end
...
end
Вы также можете по езде to_param в модели фиксации, чтобы вернуть значение ша.
class Commt < ActiveRecord::Base
...
def to_param
sha
end
end
Так что теперь link_to commit_url(@commit, :user => current_user, :repo => @repo)
предоставит URL-адрес, соответствующий вашей схеме.
В чем проблема, с которой вы сталкиваетесь? Что вы пробовали и что не сработали? Если вы хотите использовать тот же маршрут, что и github, используйте только тот же маршрут. – Eilon
Я хотел иметь возможность иметь вложенные ресурсы внутри этого, и понял, что могу сделать это с помощью map.with_options: path_prefix => '/: user' do .... – 2010-01-10 03:50:23