Zdá se, že velká část vašeho problému se děje proto, že převádíte řetězce na data a data zpět na řetězce. Věřím, že toho možná děláte víc, než potřebujete.
HTML formuláře ve skutečnosti „nerozumí“ datům – pouze „rozumějí“ řetězcům. Je tedy v pořádku předat jim řetězce místo dat. Jinými slovy, je v pořádku odstranit 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 %>
Také dávám přednost použití :include_blank => true
místo [['','']]
(podle mého názoru čitelnější pro člověka) a použil jsem uzavřený <br/>
tag (standardní html věci – možná jste udělali překlep?).
Mimochodem, pokud chcete zadat Datum, můžete použít konstruktor Date. Zápis je kratší a provádění je rychlejší než vytváření řetězce a analyzování data z něj.
#Date(2009,11,1) is faster, shorter, and equivalent
Date(2009,11,1) == '2009-11-01'.to_date # --> true