文字列を日付に変換し、日付を文字列に戻すため、問題の大部分が発生しているようです。必要以上にやっているのではないかと思います。
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のもの-タイプミスをしたかもしれませんか?)
ちなみに、Dateを指定したい場合は、Dateコンストラクターを使用できます。文字列を作成してそこから日付を解析するよりも、書き込みが短く、実行が高速です。
#Date(2009,11,1) is faster, shorter, and equivalent
Date(2009,11,1) == '2009-11-01'.to_date # --> true