这是我的表格:
<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)"]
如您所见,数组元素是表单的'value'元素。
作为一个附带问题:Sinatra如何处理复选框表格?我在Sinatra手册中找不到任何好的信息。
答案 0 :(得分:8)
您实际上不需要续集接收来自post
请求的项目。续集是一个数据库,因此您可以在从post
收到后将退回的项目保存到数据库中。因此,在这种情况下,您实际上并不需要它来返回数组。
此外,表单和复选框并非特定于Sinatra,但 特定于HTML。
当您将表单作为post
请求提交时,会将其发送回服务器和可以处理它的Sinatra。 Sinatra提供了一个params
方法,其中包含已提交表单值的哈希值。
在下面的示例中,我使用特殊语法(item[]
)将名为item
的值作为params哈希中的数组提供。例如,这是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
块从用户的浏览器接收get请求并处理它。在此示例中,它将HTML表单返回给用户。
post
块在用户提交表单后收到来自用户浏览器的帖子请求。向用户显示来自服务器的响应,在这种情况下是一个复选框值的数组。