Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

Condições de data usando a lógica de pesquisa


Uma grande parte do seu problema parece estar acontecendo porque você está convertendo strings em datas e datas de volta em strings. Eu acredito que você pode estar fazendo isso mais do que você precisa.

Formulários HTML realmente não "entendem" datas - eles apenas "entendem" strings. Portanto, não há problema em passar-lhes strings em vez de datas. Em outras palavras, não há problema em remover o 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 %>

Além disso, prefiro usar :include_blank => true em vez de [['','']] (mais legível, na minha opinião), e usei um <br/> fechado tag (coisas html padrão - talvez você tenha cometido um erro de digitação?).

A propósito, se você quiser especificar uma data, poderá usar um construtor Date. É mais curto para escrever e mais rápido para executar do que criar uma string e analisar uma data a partir dela.
#Date(2009,11,1) is faster, shorter, and equivalent
Date(2009,11,1) == '2009-11-01'.to_date # --> true