2011-11-02 11 views

Respuesta

108

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 } 
+0

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

+0

Sí, he establecido la relación clase de registro activo. – Sayuj

-25

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

+1

Time.now no es lo mismo que Today –

0

Otra forma es crear un ámbito en el MyModel o en ApplicationRecord usando el Arel interfaz como tokland sugensted en his answer así:

uso
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 
Cuestiones relacionadas