2010-08-08 3 views
0

HIQuelle est la meilleure façon de faire une recherche par date dans Rails?

Quelle est la meilleure façon d'implémenter une recherche simple dans les rails pour récupérer tous les modèles ayant la même date?

Par exemple, récupérez tous les clients dont la date d'anniversaire est le 23 octobre 1975, ce qui correspond à un format de date.

i.e.

create_table "customer", :force => true do |t| 
    t.string "f_name" 
    t.string "m_name" 
    t.string "l_name" 
    t.date  "date_of_birth" 
end 

Répondre

3

Je suppose que vous voulez féliciter tous les utilisateurs qui ont leur anniversaire aujourd'hui? Eh bien, je ne suis pas sur une machine dev maintenant, donc je ne peux pas tester, mais je pencherais pour quelque chose comme ceci:

@bday_customers = Customer.find(:all, :conditions => { :birthday => Date.today }) 

ou même

@bday_customers = Customer.find(:all, :conditions => { :birthday => (Date.today)..(Date.today + 2.weeks) }) 

Cela entraînera votre base de données pour faire le travail car il est optimisé pour de telles recherches.

+0

Je veux être en mesure de rechercher des clients dans la page d'index par date de naissance. Est-ce que je reprends tous les clients avec la date de naissance bla bla bla etc. en utilisant un date_select dans la vue? –

+0

Eh bien, remplacez simplement 'Date.today' par la valeur params donnée dans le menu date_select. Mais à moins que vous ne vouliez jouer à la loterie lors de la recherche d'une date spécifique, je suggère l'option de portée que j'ai utilisée dans mon deuxième exemple. – Rock

+0

le format de date que je reviens de mes dates_select est un hash comme {"(1i)" => "2010", "(2i)" => "8", "(3i)" => "16"}, comment puis-je convertir cela dans un format de date afin que je puisse l'utiliser dans la condition:? merci –

1

En supposant que date est une chaîne de la forme 23-10-1975 alors quelque chose comme ceci;

Customer.all(:conditions => { :date_of_birth => Date.strptime(date, '%d-%m-%Y') }) 
+0

désolé, ma question était très vague, j'ai mis à jour la question. Je ne suis pas trop familier avec les rails, mais la date n'est pas un format de chaîne. sa date. –

+0

@Mo Je comprends que le champ de base de données est une date et non une chaîne. La chaîne dont je parlais était le format que vous obtiendrez de votre vue à travers le 'date_select' que l'utilisateur soumet le formulaire – bjg

+0

Désolé, je ne savais pas vraiment ce que vous vouliez dire. ma faute. Merci d'avoir répondu. –

Questions connexes