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

John Topley picture John Topley · Apr 28, 2010 · Viewed 46.6k times · Source

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.

Answer

include picture include · Apr 28, 2010

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