【问题标题】:Passing form input dynamically to action from erb将表单输入动态传递给 erb 的操作
【发布时间】:2013-06-21 04:11:37
【问题描述】:

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

【问题讨论】:

    标签: ruby forms sinatra erb


    【解决方案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 路由将send back a 200 (or 201) 您想要显示的内容。如果客户端请求再次查看订单,他们可以使用带有 GET 请求的路由。

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

    【讨论】:

      【解决方案2】:

      事实证明,当您收集表单中的信息时,您无法动态发布到路线(如果我错了,请纠正我)。相反,我将 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'>
      

      哪个POST返回到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
      

      【讨论】:

        猜你喜欢
        • 2011-09-07
        • 1970-01-01
        • 2021-02-07
        • 1970-01-01
        • 2012-10-03
        • 1970-01-01
        • 1970-01-01
        • 2012-07-14
        • 1970-01-01
        相关资源
        最近更新 更多