2009-03-03 10 views
2

map.resourcesmap.resourceを使用してRailsサイトを設定していますが、少なくとも私が知る限り、制限があります。ルーティングリソースに関する問題

ここに私の現在のルーティングがあります。一般的な意味で

map.with_options :conditions => { :subdomain => true } do |sub| 
    sub.root :controller => 'company' 

    sub.resource :company do |company| 
    company.resources :clients, :path_prefix => nil, :name_prefix => nil, :collection => { :sort => :post } do |clients| 
     clients.resources :projects, :path_prefix => ":client/:project" 
    end 
    end 

    sub.resource :user, :collection => { :logout => :get } 
end 

これは私の希望結果である:クライアントのコントローラを呼び出して、同じであるハッシュのいくつかの並べ替えとしてクライアント名を渡し

/クライアント名/アクション

/client-name/project-name/action
プロジェクトコントローラを呼び出しますが、client-nameは同じ名前のハッシュとして渡します。それはidとして渡すことを望みます。

私は、非常に基本的な私のURL構造を維持するために期待しています:

  1. クライアント名=ヤフー
  2. プロジェクト名=ログインページ

/クライアント名を/ - Clients.showメソッドを使用する必要があります。
/client-name/edit - これはClients.editメソッドを使用する必要があります。
/client-name/project-name - Projects.showメソッドを使用する必要があります。
/クライアント名/プロジェクト名/編集 - これはProjects.editメソッドを使用する必要があります。これはProjects.indexメソッドを使用している -
/クライアント名/プロジェクト:私の現在のルーティングと、それがそのようなものとして解釈されているが


/clients/client-name - これはClients.showメソッドを使用しています。


本当にありがとうございます。

+0

私はあなたの質問を解明しようとしているが、私は立ち往生しています「同じ種類のハッシュ」が何であるかを把握しようとしています。 – jdl

+0

私は使用可能なインクルードbefore_filterメソッドが必要です。そのため、params [:client]またはparams [:project]を読み込み、スラッグを読み込む必要があります。あなたは今理解していますか?あなたが好きなら、私はあなたに例を示すことができます。 – Garrett

答えて

1

リソースマッピングはそれほど強力ではありません。また、リソースの名前(会社、プロジェクトなど)をURIに追加します。まだあなたはリソースマッピングを使用して何をしようとして達成するための方法であるが、私はそれが通常のマッピングを使用する方が簡単だと思うことがあります。

map.connect ':client',  :controller => 'clients', :action => 'show' 
map.connect ':client/edit', :controller => 'clients', :action => 'edit' 

map.connect ':client/:project',  :controller => 'projects', :action => 'show' 
map.connect ':client/:project/edit', :controller => 'projects', :action => 'edit' 
+0

私はこれがあなたが探しているものだと確信しています。 RESTfulメソッドをすべて使用していない場合は、リソースを使用しません。ちょうど標準的なルーティングで行ってください。 –

+0

Rails 3で私の問題は修正されました:) – Garrett