我正在使用HAML运行Sinatra 1.0,我的表单有许多复选框,例如我喜欢的书籍,你会选择你想要的所有书籍。复选框名称为“books”。
在sinatra params ['books']中应该有一系列被检查过的书籍,但它只有最后一个被检查的项目,而不是数组。
如何获取所有选中的项目?
HAML:
%form{:action => "/test", :method => 'post'}
%input{:name=>'check',:type=>'checkbox',:value=>'item1'} item 1
%input{:name=>'check',:type=>'checkbox',:value=>'item2'} item 2
%input{:name=>'check',:type=>'checkbox',:value=>'item3'} item 3
%input{:type => "submit", :value => "send", :class => "button"}
Sinatra get method
post '/test' do
puts params['check'] #should be an array but is last item checked
end
答案 0 :(得分:3)
非常接近,但不要在数组中使用数字
%form{:action => "/test", :method => 'post'}
%input{:name=>'check[]',:type=>'checkbox',:value=>'item1'} item 1
%input{:name=>'check[]',:type=>'checkbox',:value=>'item2'} item 2
%input{:name=>'check[]',:type=>'checkbox',:value=>'item3'} item 3
现在,
post '/test' do
puts params['check'] #puts an array of what was checked to stdout
end
答案 1 :(得分:0)
不会输出一堆具有相同名称的复选框吗?如果是这样,params ['check']可能会被每个新复选框替换。
尝试命名每个不同的东西。如果你真的想要它在数组中,请尝试黑客攻击名称:
%input{:name=>'check[1]',:type=>'checkbox',:value=>'item1'} item 1
%input{:name=>'check[2]',:type=>'checkbox',:value=>'item2'} item 2
%input{:name=>'check[3]',:type=>'checkbox',:value=>'item3'} item 3
答案 2 :(得分:0)
尝试
%input{:type => "checkbox", :value => "1", :name => "checkbox[]", :id => "id1"} Chk1
%input{:type => "checkbox", :value => "2", :name => "checkbox[]", :id => "id2"} Chk2
%input{:type => "checkbox", :value => "3", :name => "checkbox[]", :id => "id3"} Chk3
然后在轨道或sinatra
puts params[:checkbox]
然后你可以看到被检查的项目。