2011-03-09 495 views
0

我有一個項目模型has_many:workers。在routes.rb中,工人對項目嵌套資源:Rails 3路由問題

resources :projects do 
      resources :workers 
    end 

我想使它這樣,當用戶進入的路徑

'/project_name' 

他們路由到show動作爲這個名字的項目。

而當用戶進入的路徑

'/project_name/workers/worker_id' 

他們路由到show動作與該ID的工人。

我還要讓這個project_worker_path(@project, @worker)路線

'/project_name/workers/worker_id' 

我會很感激的任何幫助。

+0

你的路線有什麼問題?它對我來說看起來不錯......當你去那些網站時會發生什麼? – corroded 2011-03-09 04:41:47

回答

0

沒有測試過,但我相信下面的工作。

在routes.rb中:

resources :projects, :path => '/' do 
    resources :workers 
end 

在project.rb:

def to_param 
    name 
end 

在projects_controller.rb:

@project = Project.find_by_name(params[:id]) 

在workers_controller.rb:

@project = Project.find_by_name(params[:project_id]) 

基本上,to_param用於生成url,:path => '/'告訴它你不希望任何東西出現在參數之前。如果這就是你想要的,這也將根路徑映射到projects#index。您可以將:except => :index傳遞給resources

0

至於你以後的途徑之一,你需要添加類似:

# config/routes.rb 
match ':project_id/workers/:worker_id(.:format)', :to => 'workers#show' 
match ':project_id(.:format)', :to => 'projects#show'