Активная запись - поиск записей, которые были созданы до сегодняшнего дня

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

MyTable.find_by_created_at(< 2.days.ago)

Ответ 1

Используя 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 }

Ответ 2

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

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

Ответ 3

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

@users = User.all

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