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.
To dodaje nieograniczoną wartość "Unlimited", a ja chciałbym mieć zerową wartość ... –
odpowiedź została zmieniona. –