Голяма част от проблема ви изглежда се случва, защото преобразувате низове в дати и датирате обратно в низове. Вярвам, че може да го правите повече, отколкото е необходимо.
HTML формите всъщност не "разбират" датите - те просто "разбират" низове. Така че е добре да им предадете низове вместо дати. С други думи, добре е да премахнете 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 %>
Освен това предпочитам да използвам :include_blank => true
вместо [['','']]
(по-разбираем от хората, според мен) и използвах затворен <br/>
етикет (стандартни html неща - може би сте направили печатна грешка?).
Между другото, ако искате да посочите дата, можете да използвате конструктор за дата. По-кратко е за писане и по-бързо за изпълнение, отколкото да създавате низ и да анализирате дата от него.
#Date(2009,11,1) is faster, shorter, and equivalent
Date(2009,11,1) == '2009-11-01'.to_date # --> true