¿Puedo usar redirect_to en una vista en RoR?

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:

   "email@gmail.com") %>   

Pero estoy recibiendo este error:

 undefined method `redirect_to' for # 

¿No es posible el usuario redirect_to en una vista? Si no, ¿hay algo más que pueda usar? Gracias por leer.

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 %>  <% 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.

Si desea usar redirect_to from view, haga este método:

syntax: <% controller.redirect_to path%>

Ejemplo: <% controller.redirect_to users_profile_path%>

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@gmail.com") 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 estrategia de sondeo o inserción para alertar al navegador cuando se haya aceptado 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.

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.

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 así:

 <% offersMade.each do |w| %> <% if w.accepted == true %> <% controller.redirect_to offer_path(:email => "email@gmail.com") %> <% 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 rest 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).