El mismo parcial en múltiples vistas que vuelven a la vista desde la que se llamó
-
19-08-2019 - |
Pregunta
Actualmente estoy reutilizando un parcial en dos vistas diferentes.
Ver A
Vista B
El parcial pertenece al Modelo A pero tiene una asociación con el Modelo B, por lo que también es aplicable al Modelo B.
Contiene un formulario y cuando se envían datos, siempre redirige al usuario a la Vista A. Sin embargo, cuando envío el formulario desde la Vista B, me gustaría ser redirigido a la Vista B en lugar del Formulario A.
La razón por la que redirige en este momento a la Vista A es porque ese es el modelo al que pertenece este formulario. Entonces, cuando se publica, habla con el controlador A y usa una redirección para llevar al usuario a a_url.
¿Cómo puedo decirle a mi formulario (o más para que la acción del controlador) redirija al usuario de regreso a su lugar de origen?
¡Gracias!
Solución
Resuelto.
Agregué un campo oculto a mi formulario que contenía el nombre del controlador de donde se procesó el parcial y luego mi respuesta_bloque determinó a dónde enviar al usuario.
Ver código:
<%= hidden_field_tag 'submitted_from', "#{controller.controller_name}" %>
Mi código de controlador:
if params[:submitted_from] == 'A'
redirect_to a_url
else
redirect_to b_url
end
Otros consejos
En lugar de usar una etiqueta oculta, puede colocar esto en la sesión:
session[:submitted_from] = new_model_url
y en la otra acción ..
redirect_to(session[:submitted_from])
session[:submitted_from] = nil
Es bastante fácil cambiar las variables de formulario, mientras que puede ser más difícil (pero no imposible) forjar una sesión. Iría por esta ruta si fuera mi aplicación.