我有一个简单的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
时,我会收到本月的所有活动,如果可能的话获取过去的事件,另一个获取当前事件。
答案 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_at
和end_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