2010-04-24 5 views
9

J'essaie de transmettre des données entre des blocs en utilisant sinatra. Par exemple:Passer des données entre des blocs en utilisant sinatra

@data = Hash.new 
post "/" do 
    @data[:test] = params.fetch("test").to_s 
    redirect "/tmp" 
end 

get "/tmp" do 
    puts @data[:test] 
end 

Cependant, chaque fois que j'arrive au bloc tmp @data est nul et génère une erreur. Pourquoi donc?

Répondre

14

La raison en est que le navigateur effectue deux requêtes HTTP distinctes. Deux demandes signifie deux processus séparés, ainsi la variable d'instance @data est effacée une fois que la première réponse est envoyée. Si vous souhaitez conserver les informations, vous devez utiliser des cookies ou des séances, sinon passer les données dans querystring

post "/" do 
    test = params[:test] 
    redirect "/tmp?test=#{test}" 
end 

get "/tmp" do 
    puts params[:test] 
end 
+0

Un besoin commun est d'être en mesure d'afficher les erreurs/avis lors de la redirection. Il semble que certaines personnes utilisent la [gemme sinatra-flash] (https://github.com/SFEley/sinatra-flash) pour cela, qui utilise une stratégie basée sur la session. Voir http://stackoverflow.com/a/7178664/1154642 – bryanbraun

Questions connexes