devise_for
создает маршруты, включая маршрут DELETE, который мы хотим удалить, а devise_for
не поддерживает параметр :except
или :only
.
Как удалить маршрут из Rails.application.routes
? Либо в блоке draw
, либо после?
Ниже приведены сведения об ошибке, которая была причиной, по которой нам нужно было удалить маршрут.
-
мы выдавали запрос DELETE к пользовательскому действию контроллера UJS
-
в действии контроллера мы снимали то, что хотели, а затем перенаправляли 302. Это была плохая идея, и с тех пор мы исправили ее, вернув несколько JSON.
- некоторые клиенты, получив 302, выдадут новый запрос DELETE для перенаправления, который направляется на маршрут удаления Devise! Таким образом, непреднамеренно удаляя человека! Хлоп. Мы предполагали, что это будет ПОЛУЧИТЬ. Плохое предположение.
Эта ошибка исправлена, но тем не менее я хочу удалить маршрут.
Вот что я сделал в конце, что было предложено победителем в его цитате из Хосе Валима:
В config/routes.rb
я добавил это выше вызова devise_for
, который устанавливает остальные мои маршруты 'people'
:
delete '/person', :to => 'people#destroy'
Затем в моем существующем people_controller.rb
я добавил метод no-op:
def destroy
render :nothing => true
end
Я все еще немного раздражен, что нет простого способа просто удалить маршрут из RouteSet. Кроме того, маршрут delete
по-прежнему существует для контроллера разработки, но он не будет вызван, потому что rails ищет первое совпадение в config/routes.rb
и возвращает его.