Как я могу найти записи, где дата в текущем месяце, используя ActiveRecord? - PullRequest
1 голос
/ 20 августа 2011

У меня есть простое приложение 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 ]

12 голосов
/ 20 августа 2011

Ваше условие говорит, что 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) }
0 голосов
/ 20 августа 2011

Полагаю, 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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...