Активная запись - поиск записей, которые были созданы до сегодняшнего дня
Я хочу получить все записи, где поле 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