Digamos que estoy creando un nuevo Foo mediante un formulario y un controlador de descanso rieles estándar, que es como la siguiente:Rieles: URL después de la validación falla al crear nuevos registros a través del formulario
class FoosController < ApplicationController
...
def index
@foos = Foo.all
end
def new
@foo = Foo.new
end
def create
@foo = Foo.create(params[:foo])
if @foo.save
redirect_to foos_path, :notice => 'Created a foo.'
else
render 'new'
end
end
...
end
Por lo tanto, si use el controlador restful estándar (como arriba), luego cuando estoy creando el Foo estoy en el example.com/foos/new
, y si envío el formulario y lo guardo correctamente estoy en example.com/foos
mostrando la acción del índice. Sin embargo, si el formulario no se completa correctamente, el formulario se representa nuevamente y se muestran los mensajes de error. Esto es todo simple vainilla.
Sin embargo, si se muestran errores, se mostrará la página del formulario pero la URL será example.com/foos
, porque la acción CREAR se publica en esa url. Sin embargo, uno esperaría encontrar el índice Foos # en example.com/foos
, no el formulario que acaban de enviar ahora con los mensajes de error añadidos.
Este parece ser el comportamiento estándar de Rails, pero no tiene mucho sentido para mí. Obviamente, podría volver a redirigir a nuevo en lugar de renderizar nuevo desde la acción de creación, pero el problema es que los mensajes de error, etc. se perderían junto con los Foos parcialmente completos en la memoria.
¿Existe una solución limpia para este problema, una forma de enviar personas de nuevo a example.com/foos/new
cuando hay errores en el nuevo formulario Foo que enviaron?
Gracias!
Esto es realmente muy útil, porque si bien es un hack dramático, abre la posibilidad de probar un enfoque diferente para la configuración de aplicaciones de rieles que más tarde podría hacer una gema o incluso presentar para su consideración en el núcleo de rieles . Me gusta esta idea, la probaré más tarde. ¡Gracias! – Andrew
Muy útil, pero ¿hay alguna razón por la cual la acción de actualización no utiliza la ruta de edición? –