Une grande partie de votre problème semble se produire parce que vous convertissez des chaînes en dates et des dates en chaînes. Je pense que vous en faites peut-être plus que nécessaire.
Les formulaires HTML ne "comprennent" pas vraiment les dates - ils "comprennent" simplement les chaînes. Il est donc normal de leur transmettre des chaînes à la place des dates. En d'autres termes, vous pouvez supprimer le 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 %>
Aussi, je préfère utiliser :include_blank => true
au lieu de [['','']]
(plus lisible par l'homme, à mon avis), et j'ai utilisé un <br/>
fermé tag (truc html standard - peut-être avez-vous fait une faute de frappe ?).
Au fait, si vous souhaitez spécifier une date, vous pouvez utiliser un constructeur de date. Il est plus court à écrire et plus rapide à exécuter que de créer une chaîne et d'en analyser une date.
#Date(2009,11,1) is faster, shorter, and equivalent
Date(2009,11,1) == '2009-11-01'.to_date # --> true