ruby - 获取按日期过滤的记录

时间:2010-12-26 15:56:04

标签: ruby activerecord

我有一个“Job”模块(以及db中的相应表),该模块有一个名为scheduled_run(datetime)的字段和一个名为user_id的字段:

  1. 我如何获得属于用户的所有工作并安排在今天?
  2. 我怎样才能获得属于用户的所有工作并安排在上周?

3 个答案:

答案 0 :(得分:1)

类似的东西:

Job.where(:user_id => some_user_id, :scheduled_run => Date.today).all

要查找上周的内容,您需要指定日期范围。我会让你弄明白这一部分。您需要使用ActiveRecord指南中提到的“范围条件”或“子集条件”。

Rails ActiveRecord Guide很好看。另请参阅ActiveRecord doc。

中的“条件”部分

答案 1 :(得分:1)

要获取属于某个用户且计划今天完成的所有作业,您需要在今天的时间段内搜索所有scheduled_runs:

user = User.find(1)  # Will get the user with ID 1
jobs = Job.where("user_id = :id AND scheduled_run >= :start AND scheduled_run < :end",
                 :id => user.id,
                 :start => Date.today,
                 :end   => 1.day.from_now.to_date)

要获得上周的所有工作,我们会执行类似的命令,但我们会将:start:end切换为本周的开始和结束:

user = User.find(1)  # Will get the user with ID 1
jobs = Job.where("user_id = :id AND scheduled_run >= :start AND scheduled_run < :end",
                 :id => user.id,
                 :start => 1.week.ago.to_date,
                 :end   => Date.today)

在上述两个命令中,to_date会导致ActiveRecord将结果DateTime视为当天的开头。

答案 2 :(得分:0)

它是纯粹的红宝石还是你使用rails或其他ORM /框架? 我会假设,因为问号标记为activerecord

可以这样做:

Job.where("user_id = ? AND datetime = ?", user_id, datetime).all

这里的Rails文档中更多http://api.rubyonrails.org/classes/ActiveRecord/Base.html

你也可以使用日期范围,只需在文档周围挖掘一下;)