我有一个简单的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时,我可以获得当前月份的所有事件,如果可能的话,还可以获取一个获取过去事件的作用域和另一个获取当前事件的作用域。
发布于 2011-08-20 04:28:40
您的条件表明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) }发布于 2011-08-20 04:28:45
我假设start_at和end_at是datetimes?如果是这样的话,你需要做一些稍微复杂一点的事情:
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
https://stackoverflow.com/questions/7126971
复制相似问题