如何使用Sinatra和Sequel从复选框HTML表单获取数组?

如何使用Sinatra和Sequel从复选框HTML表单获取数组?,html,ruby,forms,checkbox,sinatra,Html,Ruby,Forms,Checkbox,Sinatra,这是我的表格: <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)

这是我的表格:

<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>
如您所见,数组元素是表单的“值”元素


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

您实际上不需要Sequel来接收来自
post
请求的项目。Sequel是一个数据库,因此您可以在从
post
收到返回的项目后将其保存到数据库中。因此,在本例中,返回数组实际上并不需要它

此外,表单和复选框不是Sinatra特有的,而是HTML特有的

当您以
post
请求的形式提交表单时,表单将被发送回服务器和Sinatra,在那里可以处理表单。Sinatra提供了一个
params
方法,其中包含所提交表单值的散列

在下面的示例中,我使用一种特殊语法(
item[]
)在params散列中提供名为
item
的值作为数组。例如,这是params散列返回的
{“item”=>[“Bacon”,“Eggs(deat)”]}
,并选中两个复选框

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>
需要“sinatra”
获取“/results”do
雇员再培训局:结果
结束
发布“/结果”吗
参数[:项]。检查
结束
__结束__
@@结果
培根(1磅,切片)
鸡蛋(一打)
get
块接收来自用户浏览器的get请求并对其进行处理。在本例中,它向用户返回一个HTML表单

post
块在用户提交表单后从浏览器接收post请求。向用户显示来自服务器的响应,在本例中,该响应是复选框值的数组

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>