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