如何使用sinatra的参数从提交的表格中获取所有选中的项目?

时间:2010-06-15 02:04:42

标签: ruby webforms sinatra haml

我正在使用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

3 个答案:

答案 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]

然后你可以看到被检查的项目。