Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to do a Post/Redirect/Get using Sinatra?

Tags:

ruby

sinatra

What's Sinatra's equivalent of Rails' redirect_to method? I need to follow a Post/Redirect/Get flow for a form submission whilst preserving the instance variables that are passed to my view. The instance variables are lost when using the redirect method.

like image 563
John Topley Avatar asked Apr 28 '10 08:04

John Topley


2 Answers

Redirect in Sinatra is the most simple to use.

So the code below can explain:

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

You can also redirect to another path in your current application like this, though this sample will delete a method.

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

A very common place where this redirect instruction is used is under Authentication

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

You can see more samples under:

Sinatra Manual

FAQ

Extensions

As for your second question, passing variables into views, it's possible like this:

get '/pizza/:id' do   # makeing lots of pizza   @foo = Foo.find(params[:id])   erb '%h1= @foo.name' end 
like image 104
include Avatar answered Oct 14 '22 02:10

include


The Sinatra Book should clear your question. Especially the "Redirect" part.

Quoted from the book:

The redirect actually sends back a Location header to the browser, and the browser makes a followup request to the location indicated. Since the browser makes that followup request, you can redirect to any page, in your application, or another site entirely.

The flow of requests during a redirect is: Browser –> Server (redirect to ’/’) –> Browser (request ’/’) –> Server (result for ’/’)

like image 44
scable Avatar answered Oct 14 '22 03:10

scable