rails different content_for application ruby-on-rails

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.