Uma grande parte do seu problema parece estar acontecendo porque você está convertendo strings em datas e datas de volta em strings. Eu acredito que você pode estar fazendo isso mais do que você precisa.
Formulários HTML realmente não "entendem" datas - eles apenas "entendem" strings. Portanto, não há problema em passar-lhes strings em vez de datas. Em outras palavras, não há problema em remover o
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 %>
Além disso, prefiro usar
:include_blank => true
em vez de [['','']]
(mais legível, na minha opinião), e usei um <br/>
fechado tag (coisas html padrão - talvez você tenha cometido um erro de digitação?). A propósito, se você quiser especificar uma data, poderá usar um construtor Date. É mais curto para escrever e mais rápido para executar do que criar uma string e analisar uma data a partir dela.
#Date(2009,11,1) is faster, shorter, and equivalent
Date(2009,11,1) == '2009-11-01'.to_date # --> true