0

我正在构建一个 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
4

2 回答 2

1

当您通过 HTTP 添加或更新信息时,最后不要重定向会很有帮助,因为您必须使用状态代码进行重定向,而客户端确实需要一个状态代码来告诉它操作是否成功。

为了让你们都开心,为什么不提供与 GET 和成功 POST 相同的“订单”路线?例如

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 路由将发回 200(或 201) 您要显示的内容。如果客户端请求再次查看订单,他们可以使用带有 GET 请求的路由。

如果关于 /venue/table/ 的唯一信息实际上是订单,那么我会从路线中删除“订单”,但这只是我的意见。

于 2013-06-06T18:52:08.930 回答
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'>

哪个POSTapp.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
于 2013-06-20T20:11:37.390 回答