आपके मुद्दे का एक बड़ा हिस्सा हो रहा है क्योंकि आप स्ट्रिंग्स को तारीखों में परिवर्तित कर रहे हैं, और तारीखों को वापस स्ट्रिंग्स में बदल रहे हैं। मुझे विश्वास है कि आप इसे जरूरत से ज्यादा कर रहे होंगे।
एचटीएमएल फॉर्म वास्तव में तारीखों को "समझ" नहीं पाते हैं - वे सिर्फ तारों को "समझते हैं"। इसलिए तारीखों के बजाय उन्हें तार देना ठीक है। दूसरे शब्दों में, 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(2009,11,1) is faster, shorter, and equivalent
Date(2009,11,1) == '2009-11-01'.to_date # --> true