Estoy comenzando una aplicación de rails 3 que tiene un modelo principal y un modelo hijo (padre has_ many: children).¿Cómo puedo pasar mensajes de error de validación a un método en un controlador diferente?
Estoy tratando de configurar las cosas para que después de crear un nuevo padre, el usuario pase a la acción de mostrar de ese padre (/ padre/id). En esta vista, he incluido parciales para mostrar cualquier hijo y un formulario para crear un nuevo hijo. Después de crear un nuevo hijo, el usuario se redirige a la acción de mostrar para el padre donde aparecerá el nuevo hijo. Todo esto funciona según lo previsto.
Sin embargo, si intento validar campos en el formulario hijo nuevo, los mensajes de error que aparecen no aparecen en el formulario (las líneas necesarias en la vista están ahí y son correctas, cortadas y pegadas desde el código de andamio generado). ¿Hay alguna manera de pasar estos mensajes de error para el niño con éxito a la acción de demostración principal?
Aquí hay fragmentos de códigos relevantes;
Desde mi controlador de matriz:
def show
@parent = Parent.find(params[:id])
@child = @parent.children.new
respond_to do |format|
format.html # show.html.erb
format.xml { render :xml => @admission }
end
end
Desde mi regulador del niño:
def create
@child = Child.new(params[:parent])
respond_to do |format|
if @child.save
format.html { redirect_to(parent_path(params[:child][:parent_id]), :notice => 'Child was successfully created.') }
#This works as intended
format.xml { render :xml => @child, :status => :created, :location => @child }
else
format.html { redirect_to parent_path(params[:child][:patient_id]) }
#This redirects where I want it to go when validation fails but error messages are lost
format.xml { render :xml => @child.errors, :status => :unprocessable_entity }
end
end
end
Gracias, eso tiene los mensajes de error mostrando que es un comienzo. (Lectura alrededor - render 'parents/show' es la forma correcta). El problema es que debido a que no hay redirección, la URL que se muestra no es válida. Este es un problema mucho más pequeño pero aún menos que ideal. Gracias por la sugerencia de cargar primero al padre (aunque un usuario malintencionado aún podría enviar fácilmente un parent_id válido pero incorrecto para adjuntar un hijo). Además, debe ser Parent.find (params [: child] [: parent_id]) y .build (params [: child]). No trato de ser pedante, simplemente intento ayudar a cualquier persona que lea esto. – brad