在Sinatra的'get'和'post'路线中使用变量

时间:2015-03-17 12:01:50

标签: ruby variables post routes sinatra

我正在使用Sinatra,我在邮件请求中收到带有html / erb表单的餐馆订单(项目,数量,table_number)的参数。这一切都很精彩......

get '/mainpage' do
  @time = Time.new.strftime("%B %e, %Y")
  erb :mainpage
end

post '/mainpage' do
  table_number = params[:table_number].to_i
  item = params[:item]
  quantity = params[:quantity].to_i
  @order = "#{table_number}...#{item}... #{quantity}"
  redirect to('/mainpage')
end

当我希望在'mainpage'get请求中使@order变量可用时出现问题,因此我的html / erb页面可以像这样使用它:

<section class ="table-order">
  <%= @order %>
</section>

我将如何做到这一点?

1 个答案:

答案 0 :(得分:1)

如果@order实际上只是一个字符串而不是更复杂的对象,则可以使用URL参数来执行此操作。例如:

get '/mainpage' do
  @time = Time.new.strftime("%B %e, %Y")
  @order = params[:order] if params[:order]
  erb :mainpage
end

post '/mainpage' do
  table_number = params[:table_number].to_i
  item = params[:item]
  quantity = params[:quantity].to_i
  order = "#{table_number}...#{item}... #{quantity}"
  redirect to("/mainpage?order=#{order}")
end

如果您的@order是一个更复杂的对象,或者您需要它来保留多个重定向,请考虑使用会话来存储它。像这样:

get '/mainpage' do
  @time = Time.new.strftime("%B %e, %Y")
  @order = session[:order] if session[:order]
  erb :mainpage
end

post '/mainpage' do
  table_number = params[:table_number].to_i
  item = params[:item]
  quantity = params[:quantity].to_i
  session[:order] = "#{table_number}...#{item}... #{quantity}"
  redirect to('/mainpage')
end

有关生成网址和使用会话的详情,请参阅Sinatra's docs