resources :leagues do
resources :schedule
end
Это генерирует:
leagues/:id
leagues/:league_id/schedule/:id
Как я могу предотвратить изменение имени параметра в идентификаторе лиги? Так будет:
leagues/:id
leagues/:id/schedule/:schedule_id
resources :leagues do
resources :schedule
end
Это генерирует:
leagues/:id
leagues/:league_id/schedule/:id
Как я могу предотвратить изменение имени параметра в идентификаторе лиги? Так будет:
leagues/:id
leagues/:id/schedule/:schedule_id
Нет, пожалуйста, не делайте этого.
Причина этого в том, что он предоставляет общий интерфейс для вложенных ресурсов в каждом отдельном приложении. Делая его другим в своем приложении, вы фактически идете «против течения» Rails. В Rails есть строгий набор соглашений, которых вы должны придерживаться. Когда вы отклоняетесь от этого пути, все становится грязным.
Однако, если вы хотите, образно говоря, выстрелить себе в ногу, вам нужно будет определить маршруты вручную. Вот маршруты для семи стандартных действий в контроллере:
get 'leagues/:id/schedules', :to => "schedules#index", :as => "league_schedules"
get 'leagues/:id/schedule/:schedule_id', :to => "schedules#show", :as => "league_schedule"
get 'leagues/:id/schedules/new', :to => "schedules#new", :as => "new_league_schedule"
post 'leagues/:id/schedules', :to => "schedules#create"
get 'leagues/:id/schedule/:schedule_id/edit', :to => "schedules#edit", :as => "ed it_league_schedule"
put 'leagues/:id/schedule/:schedule_id', :to => "schedules#update"
delete 'leagues/:id/schedule/:schedule_id', :to => "schedules#destroy"
Как видите, довольно некрасиво. Но если вы действительно очень-очень хотите сделать это таким образом, вы должны сделать это именно так.
Вы можете установить параметр «param» на маршруте ресурса, чтобы переопределить параметр «id» по умолчанию:
resources :leagues do
resources :schedule, param: schedule_id
end
ссылки на документ Rails Routing: http://guides.rubyonrails.org/routing.html#overriding-named-route-parameters
Он добавляет идентификатор к вложенному_параму, что является обломом, потому что я хотел бы, чтобы у меня не было имени в единственном числе. Похоже, они действительно не хотят, чтобы вы делали это только как :id
, так как это может привести к конфликтам. Кроме того, это будет немного отличаться от обычной спокойной маршрутизации, которую любят использовать рельсы.
namespace :account, defaults: { type: 'account' }do
resources :auth, param: :lies_id, only: [] do
get :google
end
end
Маршруты Rake возвращают следующее
$ rake routes | grep /account/auth
account_auth_google GET /account/auth/:auth_lies_id/google(.:format)
Таким образом, решение, которое кажется более простым, состоит в том, чтобы просто изменить контроллер, чтобы он использовал имя вложенного параметра, которое он создает.