Devise routing: ¿hay alguna manera de eliminar una ruta de Rails.application.routes?

devise_for crea rutas que incluyen una ruta DELETE, que queremos eliminar, y devise_for no admite un : excepto o : sólo la opción .

¿Cómo puedo eliminar una ruta de Rails.application.routes ? ¿O en el bloque draw , o después?


Aquí hay detalles de un error, que fue la razón por la que necesitábamos eliminar la ruta.

  • estábamos emitiendo una solicitud DELETE a un controlador UJS personalizado action

  • en la acción del controlador estábamos eliminando lo que queríamos, luego haciendo una redirección 302. Esta fue una mala idea, y desde entonces la hemos corregido devolviendo algo de JSON en su lugar.

  • algunos clientes, al recibir el 302, emitían una nueva solicitud DELETE al redireccionamiento, que enruta a una ruta de eliminación de Devise. ¡Eliminando así inadvertidamente a la persona! ¡Ay! Asumimos que esto sería un GET. Mala suposición.

Este error se ha corregido, pero me gustaría eliminar la ruta de todos modos.


Esto es lo que hice al final, que fue sugerido por el ganador de la recompensa en su cita de Jose´ Valim:

En config / routes.rb , agregué esto sobre el devise_for llamada, que configura el resto de mis rutas de 'people' :

delete '/person', :to => 'people#destroy'

Luego, en mi people_controller.rb existente, agregué un método sin operación :

def destroy
  render :nothing => true
end

Todavía me molesta un poco que no haya una forma sencilla de eliminar la ruta del RouteSet. Además, la ruta delete todavía existe para el controlador del dispositivo, pero no se llamará porque rails busca la primera coincidencia en config / routes.rb y la devuelve.

20
задан sawa 10 October 2017 в 14:01
поделиться