Sebagian besar masalah Anda tampaknya terjadi karena Anda mengubah string menjadi tanggal, dan tanggal kembali ke string. Saya yakin Anda mungkin melakukannya lebih dari yang Anda butuhkan.
Formulir HTML tidak benar-benar "memahami" tanggal - mereka hanya "memahami" string. Jadi tidak apa-apa untuk memberikan string sebagai ganti tanggal. Dengan kata lain, boleh saja menghapus 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 %>
Juga, saya lebih suka menggunakan :include_blank => true
bukannya [['','']]
(lebih dapat dibaca manusia, menurut saya), dan saya menggunakan <br/>
. tertutup tag (hal-hal html standar - mungkin Anda salah ketik?).
Omong-omong, jika Anda ingin menentukan Tanggal, Anda bisa menggunakan konstruktor Tanggal. Menulis dan mengeksekusi lebih cepat daripada membuat string dan menguraikan tanggal darinya.
#Date(2009,11,1) is faster, shorter, and equivalent
Date(2009,11,1) == '2009-11-01'.to_date # --> true