Soy nuevo en rails y no estoy seguro de estar de acuerdo con la forma en que he hecho las cosas en algunos de los tutoriales que he realizado. El problema tiene que ver con la forma de manejar envíos de formularios no válidos. La forma habitual de hacer las cosas parecen ser:La forma correcta de manejar envíos de formularios no válidos en Rails
class ThingsController < ApplicationController
# POST /things
def create
@thing = Thing.new(params[:thing])
if @thing.save
flash[:notice] = 'Thing created'
redirect_to(@thing)
else
render :action => :new
end
end
Cuando @ thing.save falla, el usuario se presenta con la misma forma, pre-llenado de salida con los valores que acaba de introducir, junto con un destello de lo que pasó incorrecto. Hasta ahora todo va bien, excepto que ahora la URL ha cambiado de/cosas/nuevo a cosas /, lo que uno esperaría ver en su lugar.
Además, si el usuario actualiza la página, ahora está mirando la vista de índice. Si hace clic atrás, se le pedirá que vuelva a enviar el formulario, que siempre he tratado de evitar. Si redirecciona_ a (new_thing_path), se pierde el envío anterior del usuario, como son los mensajes de error.
Me doy cuenta de que RESTfully, este método puede ser "correcto", ya que la creación de un objeto cosa debería ser el resultado de POSTing a/things, pero en lo que respecta a la interfaz del usuario, no me preocupa particularmente.
que pude "manualmente" guardar el objeto @thing válida en la sesión del usuario, que se mostrará después de que le redirigir de nuevo a new_thing_path, pero que se siente como un truco. Parece que debería haber una "manera de hacer rails" para hacer exactamente eso.
Ideas?
Tengo exactamente la misma queja sobre el núcleo de Rails, pero usted lo redactó mejor que yo :) Buena pregunta. – Andrew