2012-09-29 29 views
2

這裏是我的形式:如何使用Sinatra和Sequel從複選框HTML表單中獲取數組?

<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打)」框中,我怎麼使用西納特拉和/或續集返回數組:

["Bacon","Eggs (dozen)"] 

正如你所看到的,數組元素是窗體的'值'元素。

作爲一個方面的問題:Sinatra如何處理複選框形式呢?我在Sinatra手冊中找不到任何好的信息。

回答

8

你實際上並不需要續集收到post請求的項目。續集是一個數據庫,所以您從post收到它後,將返回的項目保存到數據庫中。所以,在這種情況下,你並不需要它來返回一個數組。

此外,表單和複選框並非特定於Sinatra,但是特定於HTML的

當您將表格作爲post請求提交時,它將被髮送回服務器和Sinatra進行處理。 Sinatra提供了一個params方法,其中包含已提交表單的值的散列值。

在下面的示例中,我使用特殊語法(item[])將名爲item的值作爲params散列中的數組提供。例如,這就是params hash返回{"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塊從用戶的瀏覽器收到獲取請求並處理它。在這個例子中,它向用戶返回一個HTML表單。

post塊在提交表單後會從用戶的瀏覽器收到提交請求。用戶會看到服務器的響應,在這種情況下,該響應是複選框值的數組。

相關問題