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

shi*_*las 5 ruby sinatra

这似乎工作正常:

意见/ index.haml:

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

app.rb:

post '/' do
  @values = params
  haml :review
end
Run Code Online (Sandbox Code Playgroud)

意见/ review.rb

Hello #{params[:name]}!
Run Code Online (Sandbox Code Playgroud)

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

app.rb:

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

get '/review' do
  @values = params
  haml :review
end
Run Code Online (Sandbox Code Playgroud)

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

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

Kas*_*yap 7

您可以将参数存储在会话中或显式指定查询字符串.来自Sinatra文档的浏览器重定向

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

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

{
  :name => "Whatever",
  :address => "Wherever"
}
Run Code Online (Sandbox Code Playgroud)

这个哈希可以像这样的字符串:

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

现在在里面使用它 post '/' do

redirect to("/review?#{query}")
Run Code Online (Sandbox Code Playgroud)