2012-04-06 11 views
5

mam to teraz:Szyny i formy: rozwijanej z zakresu numerów i nieograniczone

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

Spowoduje to:

<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> 
... 

Jak Dodałbym inną opcję, że select będzie to "All" i która wartość powinna być zero?

Odpowiedz

8

Będzie prawie rób co chcesz:

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

select może podjąć szereg formatów na liście opcji. Jednym z nich jest tablica tablic, jak podano tutaj. Każdy element w zewnętrznej tablicy to 2-elementowa tablica zawierająca wyświetlany tekst opcji i wartość formularza, w tej kolejności.

Powyżej zmienia się map w jedną taką tablicę, gdzie wyświetlana opcja jest identyczna z wartością formularza. Następnie dodaje się ostatnią opcję.

Należy zauważyć, że spowoduje to utworzenie wartości "" (pusty ciąg) dla parametru, jeśli wybrano "Nieograniczony" - jeśli wstawisz pole wyboru do formularza i formularz zostanie przesłany, przeglądarka wyśle ​​coś dla tego parametru formularza i nie można jawnie wysłać nil jako parametru formularza. Jeśli naprawdę chciał was mogłby sprytnego javascript, aby uzyskać przeglądarka nie wysyła parmeter w ogóle, ale to byłoby więcej pracy niż po prostu dodając:

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

do działania kontrolera.

+0

To dodaje nieograniczoną wartość "Unlimited", a ja chciałbym mieć zerową wartość ... –

+0

odpowiedź została zmieniona. –