ruby on rails - different - ¿Puedo usar redirect_to en una vista en RoR?
render json rails 5 (5)
El código en la vista podría moverse al controlador, lo que haría que redirect_to esté disponible.
class ApplicationController < ActionController::Base
before_action :check_for_accepted_offer
def check_for_accepted_offer
if Offer.any? { |o| o.accepted }
redirect_to offer_path(:email => "[email protected]")
end
end
end
Si el OP desea cambiar inmediatamente la URL cuando se acepta una oferta, entonces ninguno del código Ruby que se muestra en las respuestas sería útil porque solo se evalúa cuando se carga la página. El OP tendría que configurar algún tipo de encuesta o estrategia de inserción para alertar al navegador cuando se acepte una oferta y luego usar el esquema de redireccionamiento de JavaScript publicado en otra respuesta:
window.location.href="/logins/sign_up?email=<%= w.email %>"
Aunque, esto no responde a la pregunta: "¿Cómo puedo usar redirect_to en una vista?", Creo que esta respuesta en última instancia, habría sido más útil para el OP. Me encontré con alguien que usaba esta respuesta para redirigir a otra página, cuando la redirección debería haberse realizado en el controlador.
En mi aplicación, tengo una pequeña casilla que aparece en cada página, verificando el estado de las solicitudes realizadas por el usuario. Si se acepta una solicitud en cualquier momento, entonces el usuario debe ser llevado automáticamente a una página determinada. Este es mi código hasta ahora:
<% offersMade.each do |w| %>
<% if w.accepted == true %>
<% redirect_to offer_path(:email => "[email protected]") %>
<% end %>
<% end %>
Pero estoy recibiendo este error:
undefined method `redirect_to'' for #<ActionView::Base:0x1042a9770>
¿No es posible el usuario redirect_to en una vista? Si no, ¿hay algo más que pueda usar? Gracias por leer.
Sí, puede llamar a controller.redirect_to
desde su vista para obtener lo que desea sin tener que presentar la respuesta completa y luego usar javascript en el cliente para realizar una nueva solicitud.
En tu ejemplo, esto se vería como:
<% offersMade.each do |w| %>
<% if w.accepted == true %>
<% controller.redirect_to offer_path(:email => "[email protected]") %>
<% end %>
<% end %>
Tenga en cuenta que este controller.redirect_to
no saldrá de su bucle, por lo que probablemente querrá break
y probablemente querrá asegurarse de que el resto de su vista solo se presente condicionalmente si no redirigió.
(Descargo de responsabilidad: No necesariamente estoy de acuerdo con esta técnica. Será mejor que lo haga en su controlador o ayudante, como han mencionado otros).
Si desea usar redirect_to from view, haga este método:
sintaxis: <% controller.redirect_to path%>
Ejemplo: <% controller.redirect_to users_profile_path%>
redirect_to es un método de ActionController :: Base Class, por lo que no puede usarlo en ActionView.
Puedes intentar seguir
<% if w.accepted == true %>
<script type="text/javascript">
window.location.href="/logins/sign_up" // put your correct path in a string here
</script>
<% end %>
Editado para el parámetro de correo electrónico
window.location.href="/logins/sign_up?email=<%= w.email %>"
Lo siento, no sé si hay algo en ruby para eso.
redirect_to
no es un método de ActionView
. Es un método de ActionController
. Probablemente pueda usar Javascript window.location.href en la carga de la página o algún otro evento para llevar a su usuario a otra página.