Mysql
 sql >> Base de données >  >> RDS >> Mysql

Conditions de date utilisant la logique de recherche

Une grande partie de votre problème semble se produire parce que vous convertissez des chaînes en dates et des dates en chaînes. Je pense que vous en faites peut-être plus que nécessaire.

Les formulaires HTML ne "comprennent" pas vraiment les dates - ils "comprennent" simplement les chaînes. Il est donc normal de leur transmettre des chaînes à la place des dates. En d'autres termes, vous pouvez supprimer le 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 %>

Aussi, je préfère utiliser :include_blank => true au lieu de [['','']] (plus lisible par l'homme, à mon avis), et j'ai utilisé un <br/> fermé tag (truc html standard - peut-être avez-vous fait une faute de frappe ?).

Au fait, si vous souhaitez spécifier une date, vous pouvez utiliser un constructeur de date. Il est plus court à écrire et plus rapide à exécuter que de créer une chaîne et d'en analyser une date.

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