2010-05-07 28 views
1

有一个名为contact_email.date_sent如何在rails上使用.find过去五天的ruby?

我希望能够运行它显示所有那些DATE_SENT的范围是date.today和date.today在5天前的报表模型。

我想我使用类似

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

但并不清楚究竟是最好的方式。谢谢!

回答

1

尝试这种情况:

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

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

买者更快:

date_sent柱的应少一点比当前日期。

编辑1

要迁移添加索引:

add_index :contact_emails, :date_sent 
+0

是否有可能使我能够得到Date.today在星期一至星期五发送的内容? – Angela 2010-05-08 16:20:26

+0

如何创建迁移以将date_sent添加为索引(date_sent alrady存在,但未设置为索引)? – Angela 2010-05-08 16:21:23

+0

更新了答案,看看。 – 2010-05-08 17:29:12

1

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

+0

您也可以使用>,因为大概您的数据库不包含未来的电子邮件。 – bnaul 2010-05-07 04:12:51

+0

正确,但这种情况有助于追溯查找东西。 – Eimantas 2010-05-07 10:12:22

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) 
+0

我喜欢这个主意......我需要刷新一下named_scope ... – Angela 2010-05-08 16:42:41

相关问题