如何使用ActiveRecord查找日期在当月内的记录?

时间:2011-08-19 20:20:19

标签: ruby-on-rails ruby-on-rails-3 activerecord

我有一个简单的rails应用程序,就像一个具有start_at字段和end_at字段的事件系统。我希望能够显示本月start_at月下降的事件。我为此定义了一个范围,如下所示:

scope :this_months_event, lamda{where("start_at = ?" Time.zone.now.month)}

每当我在控制台窗口中尝试这个时,我得到一个空数组。我发现start_at字段的月份未被提取,因此找不到start_at个月,因此它返回空。

有没有人知道这样做的好方法,或者我如何通过start_at月,这样当我致电Event.this_months_event时,我会收到本月的所有活动,如果可能的话获取过去的事件,另一个获取当前事件。

2 个答案:

答案 0 :(得分:12)

您的条件是start_at应该是Time.zone.now.month的值,在撰写本文时为8.您想要将start_at与月末的开头和月末进行比较:

scope :this_months_event, lambda { where("start_at >= ? AND start_at <= ?", 
  Time.zone.now.beginning_of_month, Time.zone.now.end_of_month) }

答案 1 :(得分:0)

我认为start_atend_at是日期时间?如果是这样,你需要做一些稍微复杂的事情:

scope :this_months_event, lambda { where("EXTRACT(MONTH FROM start_at)) = ?", Time.zone.now.month) }

请参阅http://www.postgresql.org/docs/9.0/static/functions-datetime.html#FUNCTIONS-DATETIME-EXTRACT