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

use*_*730 2 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)
    <input type="submit" value="Calculate">
</form>
Run Code Online (Sandbox Code Playgroud)

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

["Bacon","Eggs (dozen)"]
Run Code Online (Sandbox Code Playgroud)

如您所见,数组元素是表单的"值"元素.

作为一个侧面问题:Sinatra如何处理复选框表格?我在Sinatra手册中找不到任何好的信息.

Jos*_*gts 8

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

此外,表格和复选框不是特定于西纳特拉,但特定的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>
Run Code Online (Sandbox Code Playgroud)

get块从用户的浏览器接收get请求并处理它.在此示例中,它将HTML表单返回给用户.

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