Rails 3 - Как изменить параметр: id в ресурсах - PullRequest
3 голосов
/ 22 марта 2012

In routes.rb,

resources :projects

дает следующие маршруты

/projects/
/projects/:id

При использовании вложенных ресурсов, таких как

resources :projects do
  resources :photos
end

это дает следующие маршруты

/projects/
/projects/:id
/projects/:project_id/photos
/projects/:project_id/photos/:id

Это вызывает у меня проблему, потому что мне приходится писать специальный контроллер before_filter, выбирая между params[:id] и params[:project_id] для выполнения Project.find(params[:project_id] || param[:id])

Есть лиспособ изменить маршруты, чтобы иметь :project_id сам для всех маршрутов?

/projects/
**/projects/:project_id**
/projects/:project_id/photos
/projects/:project_id/photos/:id

Ответы [ 3 ]

2 голосов
/ 23 марта 2012

Другой способ - определить метод, который находит текущий проект по: project_id, в ApplicationController

def current_project
  @current_project ||= Project.find params[:project_id]
end

И переопределить этот метод в ProjectController

def current_project
  @current_project ||= Project.find params[:id]
end

Затем вы можете использовать current_project в фильтрах для всех ваших контроллеров

1 голос
/ 22 марта 2012

Имя параметра ресурса не может быть изменено

Но вы можете переопределить его как невозобновляемый путь до ресурсов

get "projects/:project_id" => "projects#show"
# etc. for all other 3 methods
0 голосов
/ 01 августа 2013

Я думаю, что вы ищете, Неглубокое вложение: http://edgeguides.rubyonrails.org/routing.html#nested-resources

Посмотрите на 2.7.2 Неглубокое вложение

...