Active Record - найти записи, которые были созданы до сегодняшнего дня - PullRequest
73 голосов
/ 02 ноября 2011

Я хочу получить все записи, в которых поле create_at меньше, чем сегодня (дата).Есть что-нибудь вроде:

MyTable.find_by_created_at(< 2.days.ago)

Ответы [ 4 ]

142 голосов
/ 02 ноября 2011

Использование ActiveRecord стандартным способом:

MyModel.where("created_at < ?", 2.days.ago)

Использование базового интерфейса Arel :

MyModel.where(MyModel.arel_table[:created_at].lt(2.days.ago))

Использование тонкого слоя поверх Arel:

MyModel.where(MyModel[:created_at] < 2.days.ago)

Использование squeel :

MyModel.where { created_at < 2.days.ago }
3 голосов
/ 19 октября 2018

Чтобы получить все записи MyTable, созданные до 2 дней назад:

MyTable.where(created_at: Date.new..2.days.ago)

Обратите внимание, что вы также можете искать записи с полями, содержащими поля в будущем, аналогичным образом, то есть получить все записи MyTable с event_date как минимум через 2 дня:

MyTable.where(event_date: 2.days.from_now..DateTime::Infinity.new)
1 голос
/ 12 октября 2017

Другой способ - создать область в MyModel или ApplicationRecord с использованием интерфейса Arel , например tokland , сгенерированного в его ответ следующим образом:

scope :arel, ->(column, predication, *args) { where(arel_table[column].public_send(predication, *args)) }

Пример использования области действия:

MyModel.arel(:created_at, :lt, 2.days.ago)

Для всех прогнозов проверьте документацию или исходный код .Эта область не нарушает цепочку where.Это означает, что вы также можете сделать:

MyModel.custom_scope1.arel(:created_at, :lt, 2.days.ago).arel(:updated_at, :gt, 2.days.ago).custom_scope2
0 голосов
/ 04 февраля 2012

Time.now относится прямо сейчас или в эту самую секунду.Поэтому, чтобы найти всех пользователей раньше, просто используйте

@users = User.all

. Это позволит найти всех пользователей ранее и исключить будущих пользователей или пользователей, которые присоединятся после Time.now

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