Rails 3路由问题

时间:2011-03-09 04:35:22

标签: ruby-on-rails-3

我有一个项目模型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'

我很感激任何帮助。

2 个答案:

答案 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来关闭该部分。