如何在轨道上的红宝石中使用.find过去五天?

时间:2010-05-07 04:01:38

标签: ruby-on-rails find date

有一个名为contact_email.date_sent的模型

我希望能够运行一个报告,显示date_sent范围介于date.today和date.today 5天之前的所有报告。

我假设我使用类似

的东西
@send_emails = Contact_Email.find(:conditions=> ???)

但不清楚究竟什么是最好的方法。谢谢!

3 个答案:

答案 0 :(得分:1)

ContactEmail.find(:conditions => ['date_sent BETWEEN ? AND ?', Date.today, 5.day.ago.to_date])

答案 1 :(得分:1)

试试这个:

ContactEmail.all(:conditions => ["date_sent >= ?", 5.days.ago.to_date])

这种方法比使用BETWEEN子句更快(假设date_sent被编入索引)

警告:

date_sent列的值应小于当前日期。

修改1

在迁移中添加索引:

add_index :contact_emails, :date_sent

答案 2 :(得分:0)

如果您经常使用它,为什么不在模型中放置named_scope:

named_scope :recent, lambda { |*args| {:conditions => ["date_sent > ?", (args.first || 5.days.ago)]} }

这将让你写:

ContactEmail.recent

过去5天的价值,或使用arg指定您自己的时间范围,例如过去两周:

ContactEmail.recent(2.weeks.ago)