2012-04-06 31 views
5

我現在有這個權利:Rails和形式:下拉與數字的範圍和無限

<%= f.select :credit, (0..500) %> 

這將導致這樣的:

<option value="1">1</option> 
<option value="2">2</option> 
<option value="3">3</option> 
<option value="4">4</option> 
<option value="5">5</option> 
<option value="6">6</option> 
<option value="7">7</option> 
<option value="8">8</option> 
<option value="9">9</option> 
... 

我怎麼會在選擇添加另一種選擇那將是「全部」和哪個值應該是

回答

8

這將幾乎做你想要什麼:

<%= f.select :credit, ((0..500).map {|i| [i,i] } << ["No limit",nil]) %> 

select可以採取多種格式的選項列表。其中之一是陣列的數組,如這裏給出的。外數組中的每個元素是一個2元素數組,包含顯示的選項文本和表單值,按照該順序。

上面的map(0..500)變成一個像這樣的數組,其中顯示的選項與表單值相同。然後添加最後一個選項。

請注意,如果選擇「無限制」,這將產生一個參數值「」(一個空字符串) - 如果您將選擇字段放入表單並且表單被提交,瀏覽器將發送一些內容到對於該表單參數,並且無法明確將nil作爲表單參數發送。如果你真的想你可以使用一些巧妙的JavaScript來讓瀏覽器不是在所有發送parmeter,但是這將是更多的工作不是簡單地補充說:

param[:credit] == "" and param[:credit] = nil 

到控制器的動作。

+0

這增加了無限的價值「無限」,我想一個零值... – 2012-04-06 04:30:52

+0

答覆修正。 – 2012-04-06 05:11:08