Кажется, что большая часть вашей проблемы происходит, потому что вы конвертируете строки в даты и возвращаетесь к строкам. Я полагаю, что вы делаете это больше, чем нужно.
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 - может быть, вы сделали опечатку?). 1010 *
Кстати, если вы хотите указать Date, вы можете использовать конструктор Date. Это короче, чтобы написать и быстрее выполнить, чем создание строки и парсинг даты из нее.
#Date(2009,11,1) is faster, shorter, and equivalent
Date(2009,11,1) == '2009-11-01'.to_date # --> true