2009-04-12 14 views
5

Tengo una lista de tareas (nombre, starts_at) y estoy tratando de mostrarlas en una vista diaria (como iCal).Rieles: ¿encuentra tareas que se crearon en un día determinado?

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

no puedo encontrar la manera de convertir Time.now como "2009-04-12 10:00:00" en el inicio (y final) del día de forma dinámica por lo que se puede hacer la comparación .

Respuesta

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

Hola @august, veo que at_end_of_day está rompiendo, así que solo usé end_of_day –

3

Ampliando un poco la respuesta de augustl. En su modelo Task, puede definir un método para obtener estas tareas por usted.

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 

Esto ayuda a mantener su controlador delgado. También comparo el final del día con el comienzo de mañana. Esto asegura que si un usuario crea una tarea a las 11:59:59 PM permanece en el día correcto.

0

¿No sería:

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

O de lo contrario no sería comprobar si hay 00:00:00 en el día de las tareas y 11:59:59 es el último valor al final de la día de tareas.

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