2012-09-26 50 views
4

這似乎很好地工作:後的數據傳遞到其他頁面中西納特拉

的意見/ index.haml:

%form{:method => 'POST' :action => '/'} 
    %label{:for => 'name'} Name: 
    %input{:type => 'text, :value => @values[:name] || ""} 
    %input{:type => 'submit'} 

app.rb:

post '/' do 
    @values = params 
    haml :review 
end 

的意見/ review.rb

Hello #{params[:name]}! 

但是,當我嘗試發送我的後數據對不同的URL相同的觀點我得到一個錯誤,或者換句話說:

app.rb:

post '/' do 
    @values = params 
    redirect '/review' 
end 

get '/review' do 
    @values = params 
    haml :review 
end 

的數據是不會通過,但不會引發錯誤。

如何通過這樣的頁面發送後數據?理想情況下,我不想創建數據庫。

回答

6

您可以將參數存儲在會話中或明確指定查詢字符串。 Browser Redirect from Sinatra Documentation

如文檔中所述,您可以使用會話或將POST參數轉換爲查詢字符串,並在redirect方法中使用它。粗例子是:

說出POST PARAMS的'/'塊內的散列是:

{ 
    :name => "Whatever", 
    :address => "Wherever" 
} 

該散列可以做成一個字符串,象這樣:

query = params.map{|key, value| "#{key}=#{value}"}.join("&") 
# The "query" string now is: "name=Whatever&address=Wherever" 

現在內部使用此post '/' do

redirect to("/review?#{query}")