2010-04-28 15 views
22

¿Cuál es el equivalente de Sinatra del método redirect_to de Rails? Necesito seguir un flujo de publicación/redireccionamiento/obtención de un envío de formulario mientras conserva las variables de instancia que pasan a mi vista. Las variables de instancia se pierden al usar el método redirect.¿Cómo hacer una publicación/redirigir/obtener usando Sinatra?

+0

http://stackoverflow.com/questions/4726884/can-you-specify-the-http-method- to-use-with-sinatras-redirect – Dmitry

+0

Es posible que desee echar un vistazo a Net :: HTTP http://stackoverflow.com/questions/10184737/how-can-i-make-a-post-request-inside- ruby-sinatra –

Respuesta

6

El Sinatra Book debería aclarar su pregunta. Especialmente la parte "Redirect".

Citado del libro:

La redirección realidad devuelve una cabecera Location al navegador y el navegador hace una petición de seguimiento a la ubicación indicada. Dado que el navegador realiza esa solicitud de seguimiento, puede redirigir a cualquier página, a su aplicación u a otro sitio por completo.

El flujo de solicitudes durante una redirección es: Navegador -> Servidor (redirigir a '/') -> Navegador (solicitud '/') -> Servidor (como resultado de '/')

+1

La solución es almacenar cosas en la sesión. Todos los valores que necesita después de la redirección que están actualmente en ivars deben colocarse en la sesión. –

+0

Hace poco hice una pregunta similar, pero todavía no he encontrado una respuesta definitiva en caso de que las cookies estén deshabilitadas en el lado del cliente ... ¿Es lo que sugiere la única solución que conoce? Alguien mas ? Gracias –

+1

El enlace del libro de sinatra ya no está disponible. – Andres

47

redirección en Sinatra es el más simple de usar.

Así que el código de abajo puede explicar:

require 'rubygems' 
require 'sinatra' 

get '/' do 
    redirect "http://example.com" 
end 

También puede redirigir a otra ruta en su aplicación actual de este tipo, aunque esta muestra se eliminará un método.

delete '/delete_post' do 
    redirect '/list_posts' 
end 

Un lugar muy común que se utiliza esta instrucción de redirección es bajo Autenticación

def authorize! 
    redirect '/login' unless authorized? 
end 

Se puede ver más muestras en:

Sinatra Manual

FAQ

Extensions

En cuanto a su segunda pregunta, pasar variables a puntos de vista, es posible de esta manera:

get '/pizza/:id' do 
    # makeing lots of pizza 
    @foo = Foo.find(params[:id]) 
    erb '%h1= @foo.name' 
end 
+3

Esto no responde mi pregunta. Quiero redirigir dentro de un controlador y conservar las variables de instancia, como puede hacerlo en Rails. –

+0

Esto también en Chrome genera un POST si PUBLICAS, por lo que al actualizar la página obtienes el reenvío del formulario. – Dmitry

+1

Sinatra Manual ya no es un enlace válido. – zhon

Cuestiones relacionadas