Quiero obtener todos los registros donde el campo created_at es menor que el día de hoy (una fecha). ¿Hay algo como:Registro activo - Buscar registros que se crearon antes de hoy
MyTable.find_by_created_at(< 2.days.ago)
Quiero obtener todos los registros donde el campo created_at es menor que el día de hoy (una fecha). ¿Hay algo como:Registro activo - Buscar registros que se crearon antes de hoy
MyTable.find_by_created_at(< 2.days.ago)
Usando ActiveRecord la forma estándar:
MyModel.where("created_at < ?", 2.days.ago)
Utilizando el Arel interfaz subyacente:
MyModel.where(MyModel.arel_table[:created_at].lt(2.days.ago))
El uso de un simple thin layer sobre Arel:
MyModel.where(MyModel[:created_at] < 2.days.ago)
Utilización de la biblioteca squeel:
MyModel.where { created_at < 2.days.ago }
Time.now se refiere a en este momento o este mismo segundo. Así que para encontrar todos los usuarios antes de ahora sólo tiene que utilizar
@users = User.all
Esto da como resultado todos los usuarios antes de este momento y excluirá a los futuros usuarios o usuarios que se unen después Time.now
Time.now no es lo mismo que Today –
Otra forma es crear un ámbito en el MyModel
o en ApplicationRecord
usando el Arel interfaz como tokland sugensted en his answer así:
scope :arel, ->(column, predication, *args) { where(arel_table[column].public_send(predication, *args)) }
ejemplo del alcance:
MyModel.arel(:created_at, :lt, 2.days.ago)
Para todas las predicciones, active la documentation o source code. Este alcance no rompe la cadena where
. Esto significa que también puede hacer:
MyModel.custom_scope1.arel(:created_at, :lt, 2.days.ago).arel(:updated_at, :gt, 2.days.ago).custom_scope2
gracias !. Si necesito todos los registros de MyTable1, que es una relación de uno a uno con MyTable en la misma condición, ¿cómo escribir la consulta? Me refería a algo como 'MyTable1.where (MyTable [: created_at]
Sayuj
Sí, he establecido la relación clase de registro activo. – Sayuj