Rails:查找某一天创建的任务?

我有一个任务列表(name,starts_at),我试图在日常视图中显示它们(就像iCal一样)。

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

我无法弄清楚如何将Time.now(例如“2009-04-12 10:00:00”)动态转换为当天的开始(和结束),以便我可以进行比较。

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

瞧!

扩展奥古斯特的答案一点点。 在您的Task模型中,您可以定义一个方法来为您获取这些任务。

  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 

这有助于保持您的控制器瘦。 我还比较了一天的结束和明天的开始。 这可以确保如果用户在晚上11:59:59创建任务,它将保持在正确的日期。

不是吗?

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

否则你永远不会在任务当天检查00:00:00,而11:59:59是任务结束时的最后一个值。

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