Một phần lớn vấn đề của bạn dường như đang xảy ra bởi vì bạn đang chuyển đổi chuỗi thành ngày tháng và ngày trở lại chuỗi. Tôi tin rằng bạn có thể làm được nhiều hơn những gì bạn cần.
Các biểu mẫu HTML không thực sự "hiểu" ngày tháng - chúng chỉ "hiểu" các chuỗi. Vì vậy, nó là ok để chuyển chúng chuỗi thay vì ngày. Nói cách khác, bạn có thể xóa 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 %>
Ngoài ra, tôi thích sử dụng :include_blank => true
thay vì [['','']]
(theo ý kiến của tôi, con người dễ đọc hơn) và tôi đã sử dụng <br/>
đã đóng (nội dung html chuẩn - có thể bạn đã mắc lỗi đánh máy?).
Nhân tiện, nếu bạn muốn chỉ định Ngày, bạn có thể sử dụng hàm tạo Ngày. Viết ngắn hơn và thực thi nhanh hơn so với tạo một chuỗi và phân tích cú pháp ngày từ nó.
#Date(2009,11,1) is faster, shorter, and equivalent
Date(2009,11,1) == '2009-11-01'.to_date # --> true