Укажите имя параметра для дополнительных действий ресурса - PullRequest
0 голосов
/ 03 января 2019

У меня есть несколько вложенных ресурсов, указанных в 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

Есть ли более чистый способ сделать то же самое, все еще используя вложенные ресурсы?

1 Ответ

0 голосов
/ 03 января 2019

Попробуйте это

resources :installation, except: %i[index edit update show] do
  resources :configuration, shallow: true, except: %i[index show] do
    post :enable, :on => :member
    post :disable, :on => :member
  end
end

или этот

resources :installation, except: %i[index edit update show] do
  resources :configuration, shallow: true, except: %i[index show] do
    member do
      post :enable
      post :disable
    end
  end
end

Я точно знаю, что это работает с рельсами 4/5, но не уверен, что с рельсами 3. Редактировать: проверено и должно работать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...