Rails 3 вопрос маршрутизации - PullRequest
0 голосов
/ 09 марта 2011

У меня есть модель Project, которая has_many: рабочие. В rout.rb рабочие являются вложенным ресурсом для проектов:

    resources :projects do
            resources :workers
    end

Я бы хотел сделать так, чтобы при переходе пользователя по пути

'/project_name'

они перенаправлены в действие show для проекта с таким именем.

А когда пользователь идет по пути

'/project_name/workers/worker_id'

они направляются в действие show для работника с этим идентификатором.

Я также хотел бы сделать так, чтобы project_worker_path(@project, @worker) направлялся к

'/project_name/workers/worker_id'

Буду признателен за любую помощь.

Ответы [ 2 ]

0 голосов
/ 09 марта 2011

Не проверял, но я верю, что будет работать следующее.

В маршрутах.rb:

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

В проекте.rb:

def to_param
  name
end

In projects_controller.rb:

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

In worker_controller.rb:

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

По сути, to_param используется для генерации URL, а :path => '/' сообщает, что вы нене хочу, чтобы что-либо предшествовало параметру.Это также отобразит корневой путь на projects#index, если вы этого хотите.Вы можете отключить эту часть, передав :except => :index в resources.

0 голосов
/ 09 марта 2011

В качестве одного из ваших последующих маршрутов вам нужно добавить что-то вроде:

# config/routes.rb
match ':project_id/workers/:worker_id(.:format)', :to => 'workers#show'
match ':project_id(.:format)', :to => 'projects#show'
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...