我正在构建一个Sintatra应用程序,它允许我在erb文件和主应用程序之间传递信息,反之亦然,允许用户填写多个表单并操纵URL以使它们达到正确的形式我需要它们在
表格1位于/ venue / checkin。我将场地传递给erb文件,询问他们的名字和表格
<form action='<%= @venue %>/<%= @table %>/attempt' method='post' class="form-horizontal">
<input class="span12" type="text" name='firstname' placeholder="Firstname" autofocus>
<input class="span12" type="text" name='username' placeholder="Lastname">
<div class="input-prepend">
<span class="add-on">Table #</span>
<input class="span2" id="prependedInput" type="text" name='<%= @table %>' placeholder="4">
</div>
<input class="btn btn-large btn-info" type='submit' value='Order'>
</form>
我想在表单中发布用户提供的现有地点名称和表格,将我们发送回app.rb
get '/:venue/:table/order' do
erb :order
end
答案 0 :(得分:1)
当你通过HTTP添加或更新信息时,最后重定向是而不是是有帮助的,因为当客户端真的需要一个告诉它的状态代码时,你必须使用状态代码进行重定向手术是否成功。
这样你们两个都可以开心,为什么不提供与GET和成功POST相同的“订单”路线? e.g。
get "/:venue/:table/order" do
# get info from storage
erb :order
end
post "/:venue/:table/order" do
# get info from params and store it
erb :order
end
POST路由将send back a 200 (or 201) 和您要显示的内容。如果客户端要求再次查看订单,他们可以使用带有GET请求的路由。
如果关于/ venue / table /的唯一信息实际上是订单,那么我会从路线中删除“订单”,但这只是我的意见。
答案 1 :(得分:0)
当你收集表格中的信息时,你不能动态地发布到路线上(如果我错了,请纠正我)。我将POST发送到通用页面,并使用我在表单中获得的信息,如下所示:
<form action='/orders/drinks' method='post' class="form-horizontal">
<input class="span12" type="text" name='firstname' placeholder="Firstname" autofocus>
<input class="span12" type="text" name='lastname' placeholder="Lastname">
<div class="input-prepend">
<span class="add-on">Table #</span>
<input class="span2" id="prependedInput" type="text" name='table' placeholder="4">
</div>
<input class="btn btn-large btn-info" type='submit' value='Order'>
发布返回 app.rb
post '/orders/drinks' do
if session[:venue]
@order = Order.new
session[:lastname] = params['lastname']
session[:firstname] = params['firstname']
session[:table] = params['table']
erb :"orders/drinks"
else
erb "There has been an error saving your checkin information. Please try again later."
end
end
然后重定向回 GET 以获取下一个表单:
get '/orders/drinks' do
if session[:lastname]
erb :"orders/drinks"
else
erb "There was an error saving your checkin information"
end
end