2010-06-15 55 views
1

我正在使用HAML運行Sinatra 1.0,我的表單中有一些複選框,例如我喜歡的書籍,您可以選擇所有您想要的書。複選框名稱是「書籍」。如何使用sinatra的params從提交的表單中獲取所有已檢查的項目?

在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

這樣不是輸出具有相同名稱一堆複選框?如果是這樣,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 
+0

它輸出已勾選的複選框的名稱。看到我對德文的評論,我仍然有點卡住了! – 2011-08-24 13:51:03

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 
+0

不錯,但我如何評價哪些設置? 'PARAMS [ '檢查[0]']'?如果用戶選擇了一個框,我想在視圖上添加「是」。 – 2011-08-24 13:50:03

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 
 

然後在ra ils或sinatra

 

puts params[:checkbox] 
 

然後你可以看到選中的項目。

相關問題