Подтвердить что ты не робот

Как найти записи, созданные в этом месяце в Rails 3.1?

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

4b9b3361

Ответ 1

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

вы можете называть его следующим образом:

Model.this_month

Ответ 2

Я предпочитаю SQL-less:

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

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

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

User.where('created_at >= ? and created_at <= ?', Time.now.beginning_of_month, Time.now.end_of_month)

Ответ 4

Ответы с примерами scope неверны. Rails использует высокую оценку по областям и поэтому Time.now.beginning_of_month всегда будет началом месяца, когда область была первоначально оценена. Правильный способ использования дат в области - передать lambda в 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