2009-03-03 156 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 

在一般意義上,這是我想要的結果:
/客戶名稱/動作
調用客戶端控制器,並通過客戶端名稱作爲某種散列是相同的。

/客戶名稱/項目名稱/操作
調用Projects控制器,但傳遞客戶端名稱作爲散列保持不變。它想通過它作爲一個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 2009-03-03 16:44:24

+0

我想要包含可以使用的before_filter方法,所以它需要能夠讀取,params [:client]或params [:project]來拉動它們的slu。。你現在明白了麼?如果你喜歡,我可以向你展示一個例子。 – Garrett 2009-03-03 22:20:03

回答

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'