将表单输入动态传递给erb的动作

时间:2013-06-06 14:21:10

标签: ruby forms sinatra erb

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

2 个答案:

答案 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