Mysql
 sql >> Datenbank >  >> RDS >> Mysql

Datumsbedingungen mit Suchlogik

Ein großer Teil Ihres Problems scheint zu passieren, weil Sie Zeichenfolgen in Daten konvertieren und Daten in Zeichenfolgen zurückverwandeln. Ich glaube, Sie tun es vielleicht mehr als nötig.

HTML-Formulare "verstehen" Datumsangaben nicht wirklich - sie "verstehen" nur Zeichenketten. Es ist also in Ordnung, ihnen Zeichenfolgen anstelle von Datumsangaben zu übergeben. Mit anderen Worten, es ist in Ordnung, to_date zu entfernen .

<% 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 %>

Außerdem bevorzuge ich die Verwendung von :include_blank => true statt [['','']] (meiner Meinung nach besser lesbar), und ich habe einen geschlossenen <br/> verwendet Tag (Standard-HTML-Zeug - vielleicht hast du dich vertippt?).

Übrigens, wenn Sie ein Datum angeben möchten, können Sie einen Datumskonstruktor verwenden. Es ist kürzer zu schreiben und schneller auszuführen, als einen String zu erstellen und daraus ein Datum zu parsen.

#Date(2009,11,1) is faster, shorter, and equivalent
Date(2009,11,1) == '2009-11-01'.to_date # --> true