2

私はgithubがネストされたURLで持っているようなことをしたいと思います.How do I route user profile URLs to skip the controller? しかし、それをどのように進めるかは本当にわかりません。

たとえば、「:user/:repo/commit/:sha」というコミットを見ると、コントローラーはコミットされています。このタイプのネストされたリソースを複製するにはどうすればよいですか?

ありがとうございました :)

4

3 に答える 3

1

どうですか

map.connect ':user/:repo/commit/:sha', :action => :index

または、RESTfulルートが必要な場合はmap.resource代わりに使用します。map.connect

コントローラでは、URL情報をparamsから取得できます。たとえばparams[:user]、ユーザー名を返します。

于 2010-01-09T08:45:58.893 に答える
1

commit が id の代わりに :sha を使用してレコードを検索する RESTful コントローラーである場合。代わりにこれを行うことができます:

map.resource :commits, :path_prefix => ':user/:repo', :as => 'commit'

次のような標準の RESTful ルートを作成します。http://yoursite.tld/:user/:repo/commit/:id

繰り返しますが、URL の id 部分をコミット ID に変換しないのであれば、それを :sha 値として使用できない理由はありません。

例:

class CommitController < ApplicationController
  def show
    @commit = Commit.find(:first, :conditions => {:sha => params[:id]})
  end
  ...
end

コミット モデルで to_param をオーバーライドして、sha 値を返すこともできます。

class Commt < ActiveRecord::Base
  ...
  def to_param
    sha
  end
end

これでlink_to commit_url(@commit, :user => current_user, :repo => @repo)、スキームに一致する URL が提供されます。

于 2010-01-10T04:11:15.157 に答える
0

ルートに好きな名前を付け、それらを使用するコントローラーとアクションを指定できます。

たとえば、次のようになります。

map.connect ':user/:repo/commit/:sha', :controller => 'transactions', :action => 'commit'

これにより、「transactions」コントローラーの「commit」メソッドにリクエストが送信されます。

その後、パラメータを使用してコントローラで他の変数にアクセスできます。

@user = User.find(params[:user])
@repo = Repo.find(params[:repo])
于 2010-01-09T21:13:35.060 に答える