En stor del af dit problem ser ud til at ske, fordi du konverterer strenge til datoer og går tilbage til strenge. Jeg tror, du måske gør det mere, end du behøver.
HTML-formularer "forstår" ikke rigtig datoer - de "forstår" bare strenge. Så det er ok at give dem strenge i stedet for datoer. Med andre ord er det ok at fjerne 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 %>
Jeg foretrækker også at bruge :include_blank => true
i stedet for [['','']]
(mere menneskelig læsbar, efter min mening), og jeg brugte en lukket <br/>
tag (standard html-ting - måske har du lavet en tastefejl?).
Forresten, hvis du vil angive en Dato, kan du bruge en Date constructor. Det er kortere at skrive og hurtigere at udføre end at oprette en streng og analysere en dato fra den.
#Date(2009,11,1) is faster, shorter, and equivalent
Date(2009,11,1) == '2009-11-01'.to_date # --> true