2011-03-09 116 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'