Mysql
 sql >> Database >  >> RDS >> Mysql

Condizioni di data utilizzando la logica di ricerca

Gran parte del tuo problema sembra verificarsi perché stai convertendo le stringhe in date e le date risalgono a stringhe. Credo che potresti farlo più del necessario.

I moduli HTML in realtà non "capiscono" le date:semplicemente "capiscono" le stringhe. Quindi va bene passare loro delle stringhe invece delle date. In altre parole, va bene rimuovere il 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 %>

Inoltre, preferisco usare :include_blank => true invece di [['','']] (più leggibile dall'uomo, secondo me), e ho usato un <br/> chiuso tag (roba html standard - forse hai commesso un errore di battitura?).

A proposito, se vuoi specificare una data, puoi usare un costruttore Date. È più breve da scrivere e più veloce da eseguire rispetto alla creazione di una stringa e all'analisi di una data da essa.

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