Я хочу получить все записи, в которых поле created_at меньше, чем сегодня (дата). Есть что-нибудь вроде:
MyTable.find_by_created_at(< 2.days.ago)
ruby
activerecord
Саюдж
источник
источник
MyTable1.where(MyTable[:created_at] < Time.now)
возможно ли это?Чтобы получить все записи,
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)
источник
"created_at" BETWEEN $1 AND $2 [["created_at", "4713-01-01 BC"], ["created_at", "2020-03-31 21:43:28.113759"]]
Другой способ - создать область видимости в интерфейсе Arel
MyModel
или при егоApplicationRecord
использовании, например 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
источник
ActiveRecord::Relation
определяет метод экземпляра с именем,arel
что означает, что вам просто нужно выбрать другое имя.Time.now относится к прямо сейчас или к этой самой секунде. Итак, чтобы прямо сейчас найти всех пользователей, просто используйте
Это найдет всех пользователей до этого прямо сейчас и исключит будущих пользователей или пользователей, которые присоединятся после Time.now
источник