Как найти записи, созданные в этом месяце в Rails 3.1? - PullRequest
12 голосов
/ 20 ноября 2011

Кто-нибудь знает лучший запрос для поиска записей, созданных в этом месяце в Rails 3.1?

Ответы [ 4 ]

36 голосов
/ 20 ноября 2011
class Model
  scope :this_month, -> { where(created_at: Time.now.beginning_of_month..Time.now.end_of_month) }
end

Вы можете назвать это так:

Model.this_month
22 голосов
/ 20 ноября 2011

Я предпочитаю без SQL:

Model.where(:created_at => Time.now.beginning_of_month..Time.now.end_of_month)

или как область действия:

class Model < ActiveRecord::Base
  scope :this_month, -> { where(:created_at => Time.now.beginning_of_month..Time.now.end_of_month) }
end
3 голосов
/ 06 февраля 2014

Ответы, содержащие scope примеров, неверны.Rails использует нетерпеливую оценку в областях, поэтому Time.now.beginning_of_month всегда будет началом месяца, когда область была первоначально оценена.Правильный способ использования дат в области - это передать лямбду в scope.

class Model < ActiveRecord::Base
  scope :this_month, -> { where(created_at: Time.now.beginning_of_month..Time.now.end_of_month) }
end

. В Rails 4 области должны использовать вызываемый объект, такой как Lambda или Proc

.
3 голосов
/ 20 ноября 2011

Зависит от того, ищете ли вы все записи всех моделей или конкретной модели и т. Д. *

Для одной модели вы можете сделать:

User.where('created_at >= ? and created_at <= ?', Time.now.beginning_of_month, Time.now.end_of_month)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...