2009-04-12 6 views
5

J'ai une liste de tâches (nom, starts_at) et j'essaie de les afficher dans une vue quotidienne (comme iCal).Rails: Trouver les tâches qui ont été créées un certain jour?

def todays_tasks(day) 
    Task.find(:all, :conditions => ["starts_at between ? and ?", day.beginning, day.ending] 
end 

Je ne peux pas comprendre comment convertir Time.now tels que « 2009-04-12 10:00:00 » dans le début (et fin) de la journée dynamique donc je peux faire la comparaison .

Répondre

11
def todays_tasks(now = Time.now) 
    Task.find(:all, :conditions => ["starts_at > ? AND < ?", now.at_beginning_of_day, now.at_end_of_day]) 
end 

Voila!

+0

Bonjour @august, je vois que l'end_end_of_day se casse, donc j'ai juste utilisé end_of_day –

3

Expansion de la réponse d'augustl un peu. Dans votre modèle Task, vous pouvez définir une méthode pour récupérer ces tâches pour vous.

def self.todays_tasks(t = Time.now) 
    Task.all(:conditions => ["created_at > ? AND created_at < ?", t.at_beginning_of_day, t.tomorrow.at_beginning_of_day]) 
    end 

Cela permet de garder votre contrôleur maigre. Je compare aussi la fin de la journée au début de demain. Cela fait en sorte que si un utilisateur crée une tâche à 23:59:59 PM, il reste dans le bon jour.

0

Ne serait-il:

Task.all(:conditions => ["created_at >= ? AND created_at < ?", Time.now.at_beginning_of_day, Time.now.tomorrow.at_beginning_of_day]) 

Ou bien vous ne serait jamais vérifier 00:00:00 le jour des tâches et 11:59:59 est la dernière valeur à la fin de la jour des tâches.

0
def todays_tasks(day) 
    Task.where(:created_at => day.beginning_of_day .. day.end_of_day) 
end 
Questions connexes