Gran parte del tuo problema sembra verificarsi perché stai convertendo le stringhe in date e le date risalgono a stringhe. Credo che potresti farlo più del necessario.
I moduli HTML in realtà non "capiscono" le date:semplicemente "capiscono" le stringhe. Quindi va bene passare loro delle stringhe invece delle date. In altre parole, va bene rimuovere il 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 %>
Inoltre, preferisco usare :include_blank => true
invece di [['','']]
(più leggibile dall'uomo, secondo me), e ho usato un <br/>
chiuso tag (roba html standard - forse hai commesso un errore di battitura?).
A proposito, se vuoi specificare una data, puoi usare un costruttore Date. È più breve da scrivere e più veloce da eseguire rispetto alla creazione di una stringa e all'analisi di una data da essa.
#Date(2009,11,1) is faster, shorter, and equivalent
Date(2009,11,1) == '2009-11-01'.to_date # --> true