2

这是我的表格:

<form action="/results" method="post" name="checkbox_form">
    <input type="checkbox" name="item" value="Bacon">Bacon (1 lb., sliced)<br>
    <input type="checkbox" name="item" value="Eggs (dozen)">Eggs (1 dozen)
    <input type="submit" value="Calculate">
</form>

如果用户同时选中“培根”和“鸡蛋(1 打)”框,我如何使用 Sinatra 和/或 Sequel 来返回此数组:

["Bacon","Eggs (dozen)"]

如您所见,数组元素是表单的“值”元素。

作为一个附带问题:无论如何,Sinatra 如何处理复选框表单?我在 Sinatra 手册中找不到任何好的信息。

4

1 回答 1

8

您实际上不需要 Sequel从请求中接收项目。postSequel 是一个数据库,因此您可以在从您的post. 因此,在这种情况下,您实际上并不需要它来返回数组。

此外,表单和复选框并非特定于 Sinatra,而是特定于 HTML。

当您将表单作为post请求提交时,它会被发送回服务器和 Sinatra 进行处理。Sinatra 提供了一种params方法,其中包含提交的表单值的哈希值。

在下面的示例中,我使用特殊语法 ( item[]) 在 params 哈希中提供命名item为数组的值。例如,这是 params 哈希{"item"=>["Bacon", "Eggs (dozen)"]}在选中两个复选框时返回的内容。

require 'sinatra'

get '/results' do
  erb :results
end
post '/results' do
   params[:item].inspect
end

__END__

@@ results
<form action="/results" method="post" name="checkbox_form">
    <input type="checkbox" name="item[]" value="Bacon">Bacon (1 lb., sliced)<br/>
    <input type="checkbox" name="item[]" value="Eggs (dozen)">Eggs (1 dozen)<br/>
    <input type="submit" value="Calculate"/>
</form>

get块接收来自用户浏览器的获取请求并处理它。在此示例中,它向用户返回一个 HTML 表单。

在用户提交表单后,该post块会收到来自用户浏览器的发布请求。向用户显示来自服务器的响应,在这种情况下是复选框值的数组。

于 2012-09-29T04:32:50.543 回答