将帖子数据传递到Sinatra的其他页面

时间:2012-09-26 03:25:00

标签: ruby sinatra

这似乎工作正常:

视图/ 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]}!

但是,当我尝试将我的后期数据发送到不同网址上的同一视图时,我收到错误,或者换句话说:

app.rb:

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

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

数据未通过,但未引发错误。

如何跨这样的页面发送后期数据?理想情况下,我不想创建数据库。

1 个答案:

答案 0 :(得分:7)

您可以将参数存储在会话中或明确指定查询字符串。 Browser Redirect from Sinatra Documentation

如文档中所述,您可以使用会话或将POST参数转换为查询字符串,并在redirect方法中使用它。一个粗略的例子是:

假设'/'块内的POST参数哈希是:

{
  :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}")