У меня есть несколько вложенных ресурсов, указанных в routes.rb
resources :installation, except: %i[index edit update show] do
resources :configuration, shallow: true, except: %i[index show]
end
, которые генерируют следующие маршруты:
installation_configuration_index POST /installation/:installation_id/configuration(.:format) configuration#create
new_installation_configuration GET /installation/:installation_id/configuration/new(.:format) configuration#new
edit_configuration GET /configuration/:id/edit(.:format) configuration#edit
configuration PATCH /configuration/:id(.:format) configuration#update
PUT /configuration/:id(.:format) configuration#update
DELETE /configuration/:id(.:format) configuration#destroy
installation_index POST /installation(.:format) installation#create
new_installation GET /installation/new(.:format) installation#new
installation DELETE /installation/:id(.:format) installation#destroy
Теперь я хотел бы добавить некоторые дополнительные действия в конфигурацию, такие как enable
, disable
resources :installation, except: %i[index edit update show] do
resources :configuration, shallow: true, except: %i[index show] do
post :enable
post :disable
end
end
который добавляет следующее:
configuration_enable POST /configuration/:configuration_id/enable(.:format) configuration#enable
configuration_disable POST /configuration/:configuration_id/disable(.:format) configuration#disable
Это нормально, за исключением того факта, что эти новые действия используют параметр :configuration_id
вместо :id
. Это немного раздражает, если использовать before_actions
, который проверяет достоверность параметров на всем контроллере.
Я бы хотел получить что-то похожее на следующее:
configuration_enable POST /configuration/:id/enable(.:format) configuration#enable
configuration_disable POST /configuration/:id/disable(.:format) configuration#disable
Я уже искал и нашел такие вещи, как param: :id
или key: id
, ни один из которых не дал желаемого эффекта. Что работает, но немного беспорядочно, так это добавление новых маршрутов отдельно:
post 'configuration/:id/enable', action: 'enable', as: 'configuration/enable', to: 'configuration#enable'
post 'configuration/:id/disable', action: 'disable', as: 'configuration/disable', to: 'configuration#disable'
resources :installation, except: %i[index edit update show] do
resources :configuration, shallow: true, except: %i[index show]
end
Есть ли более чистый способ сделать то же самое, все еще используя вложенные ресурсы?