我有一个项目模型has_many:workers。在routes.rb中,workers是项目的嵌套资源:
resources :projects do
resources :workers
end
我想这样做,以便当用户进入路径时
'/project_name'
他们被路由到具有该名称的项目的show动作。
当用户进入路径时
'/project_name/workers/worker_id'
他们被路由到具有该id的工人的show动作。
我还希望将project_worker_path(@project, @worker)
路由到
'/project_name/workers/worker_id'
我很感激任何帮助。
答案 0 :(得分:0)
作为您之后的路线之一,您需要添加以下内容:
# config/routes.rb
match ':project_id/workers/:worker_id(.:format)', :to => 'workers#show'
match ':project_id(.:format)', :to => 'projects#show'
答案 1 :(得分: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
用于生成网址,:path => '/'
告诉它您不希望任何内容出现在参数之前。如果这是你想要的,那么这也会将根路径映射到projects#index
。您可以通过将:except => :index
传递给resources
来关闭该部分。