2

Github はどのようにしてユーザーのリポジトリを表すわかりやすい URL を取得できたのでしょうか? abc username によって呼び出されるプロジェクトの場合、foo次のような URL をどのように回避しますかhttp://github.com/foo/abc。URL のタイトルから DBのモデルを取得しabcていますか (タイトルを変更しているため、これは不合理に聞こえます)。abc取得してビューに表示できるリポジトリの一意の ID をどのように転送していますか?

私が尋ねる理由は、リソースを表示するためのより使いやすい URL を作成するという同様の問題に直面しているためです。MongoDB のオブジェクト ID は非常に長く、URL が恐ろしく見えます。回避策はありますか? リソースの CRUD (または REST) URL を示すすべてのチュートリアルには、常にオブジェクトの一意の ID (例:http://mysite.org/post/1http://mysite.org/post/1/edit. より良い方法はありますか?

4

5 に答える 5

4

彼らのコードを見たことがないので、彼らがどのようにそれを行っているかを正確に伝えることはできませんでしたが、Rails を使用している場合、同様の結果が得られる Ruby gem が少なくとも 2 つあります。

SluggedFriendly_idを見てみましょう

于 2012-05-26T08:45:32.563 に答える
1

http://github.com/foo/abcは、(そのリポジトリのマスターブランチの)一意のリポジトリ識別子です。どこかに次のようなテーブルがあると思います。

repository-id | user-id | project-id

そして、repository-idではなくユーザーとプロジェクトに基づいて検索しているだけです。

内部IDとユーザーフレンドリーIDの間でドメイン固有のマッピングを行う必要がありますが、それが1:1のマッピングであることを確認する必要があります。

于 2012-05-28T19:39:12.720 に答える
1

わかりやすいURLを使用するようにアプリケーションを変更するときに発生する可能性のある一般的な問題のメソッド、gem、およびソリューションにキャストされたこのRailsを参照してください。

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

(ライアンベイツはこれのために担当者+に値するが)

于 2012-05-31T10:31:51.570 に答える
0

FriendlyIDとNestedResourcesを使用して、このような構造をモックしました。

基本的に、フレンドリIDを使用to_paramしてルート内の-ishスラッグを取得し、ネストされたリソースを設定します。例としてGitHubを使用する:

ルート.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

この同じプロジェクトを開始するために、ここでこのチュートリアルに従いました。

于 2012-06-01T14:37:46.713 に答える
0

これは、Web サーバー (Apache など) で行われる場合はURL 書き換えと呼ばれ、Web アプリケーション フレームワーク (Ruby on Rails など) で行われる場合はルーティングと呼ばれます。

http://www.sinatrarb.com/intro#Routes
http://httpd.apache.org/docs/current/mod/mod_rewrite.html

于 2012-06-01T15:52:57.090 に答える