2010-11-11 3 views
2

J'essaie de poser des questions à tous les utilisateurs qui ont eu leur anniversaire il y a un jour et demi, qui ont leur anniversaire aujourd'hui et dans 1-2 jours à partir de maintenant.Comment choisir des utilisateurs avec anniversaire autour aujourd'hui dans Rails 3

Est-il possible de le faire de façon purement linéaire, sans écrire de requêtes SQL spécifiques à DB?

modèle utilisateur est simple: user_id, nom, date de naissance

Il y a une bonne solution here mais ce n'est pas exactement ce que je dois.

+0

Essayez sth. comme ceci: User.find: dob => (Date.today..Date.today + 2.days) – ipsum

Répondre

6
User.where(:dob => 2.days.ago .. 2.days.from_now) 

entraînera une WHERE dob BETWEEN 2_days_ago AND 2_days_from_now

+1

User.where (: dob => 2.days.ago .. 2.days.from_now) – marko

+0

Mis à jour. Merci @marko –

+2

Le problème est que nous stockons habituellement la date de naissance avec l'année de naissance réelle. (par exemple, 12 novembre 1985), cette approche ne fonctionnera donc pas –

-1

J'ai une solution. Peut-être que ce n'est pas élégant, mais cela fonctionne pour moi:

@users=User.all 

<% @users.each do |u| %> 
    <% if u.dob+(Date.today.year-u.dob.year).years >= Date.yesterday && u.dob+(Date.today.year-u.dob.year).years <= Date.tomorrow %> 
     <%= u.name %> 
    <%end%> 
<%end%> 
+1

vous ne devriez pas faire de logique comme ça dans Il y a deux autres endroits: a) dans le modèle, faites une nouvelle méthode de classe appelée 'User.recent_birthdays' qui fait tout le préfiltrage b) ou si vous devez vraiment l'ajouter au contrôleur. son style vraiment mauvais comme il est maintenant, je vais supprimer mon downvote si vous le reformatez ... – reto

Questions connexes