Wydaje się, że duża część problemu ma miejsce, ponieważ konwertujesz ciągi znaków na daty i datuje się na ciągi. Wierzę, że możesz robić to więcej, niż musisz.
Formularze HTML tak naprawdę nie "rozumieją" dat - po prostu "rozumieją" ciągi. Więc jest w porządku, aby przekazać im ciągi zamiast dat. Innymi słowy, można usunąć to_date
.
<% form_for @search do |f| %>
<%= f.label :start %>
<%= f.select :due_at_after,
['November', '2009-11-01'],['December', '2009-12-01']],
:include_blank => true
%>
<br/>
<%= f.label :end %>
<%= f.select :due_at_before,
[['December', '2009-12-01'],['January', '2010-01-01']],
:include_blank => true
%>
<%= f.submit 'Search' %>
<% end %>
Poza tym wolę używać :include_blank => true
zamiast [['','']]
(moim zdaniem bardziej czytelny dla człowieka) i użyłem zamkniętego <br/>
tag (standardowe rzeczy html - może zrobiłeś literówkę?).
Przy okazji, jeśli chcesz określić Date, możesz użyć konstruktora Date. Jest krótszy do napisania i szybszy do wykonania niż tworzenie ciągu i analizowanie z niego daty.
#Date(2009,11,1) is faster, shorter, and equivalent
Date(2009,11,1) == '2009-11-01'.to_date # --> true