En stor del av ditt problem verkar hända eftersom du konverterar strängar till datum och går tillbaka till strängar. Jag tror att du kanske gör det mer än du behöver.
HTML-formulär "förstår" inte riktigt datum - de "förstår" bara strängar. Så det är ok att ge dem strängar istället för datum. Med andra ord är det ok att ta bort 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 %>
Jag föredrar också att använda :include_blank => true
istället för [['','']]
(mer läsbar för människor, enligt min mening), och jag använde en stängd <br/>
tag (standard html-grejer - du kanske gjorde ett stavfel?).
Förresten, om du vill ange ett datum kan du använda en datumkonstruktor. Det är kortare att skriva och snabbare att köra än att skapa en sträng och analysera ett datum från den.
#Date(2009,11,1) is faster, shorter, and equivalent
Date(2009,11,1) == '2009-11-01'.to_date # --> true