Je veux obtenir tous les enregistrements dont le champ created_at est inférieur à aujourd'hui (une date). Existe-t-il quelque chose comme :
MyTable.find_by_created_at(< 2.days.ago)
Je veux obtenir tous les enregistrements dont le champ created_at est inférieur à aujourd'hui (une date). Existe-t-il quelque chose comme :
MyTable.find_by_created_at(< 2.days.ago)
Utilisation de ActiveRecord de la manière habituelle :
MyModel.where("created_at < ?", 2.days.ago)
En utilisant les données sous-jacentes Arel interface :
MyModel.where(MyModel.arel_table[:created_at].lt(2.days.ago))
En utilisant quelques couche fine sur Arel :
MyModel.where(MyModel[:created_at] < 2.days.ago)
Utilisation de grincement :
MyModel.where { created_at < 2.days.ago }
Pour obtenir tous les enregistrements de MyTable
créé jusqu'à il y a 2 jours :
MyTable.where(created_at: Date.new..2.days.ago)
Notez que vous pouvez également rechercher des enregistrements dont les champs contiennent des champs dans le futur de manière similaire, c'est-à-dire pour obtenir tous les enregistrements de la catégorie MyTable
avec un event_date
au moins 2 jours à partir de maintenant :
MyTable.where(event_date: 2.days.from_now..DateTime::Infinity.new)
Une autre méthode consiste à créer une portée dans MyModel
ou dans ApplicationRecord
en utilisant le Arel interface comme tokland Suggéré dans sa réponse comme ça :
scope :col, ->(column, predication, *args) { where(arel_table[column].public_send(predication, *args)) }
Exemple d'utilisation de la portée :
MyModel.col(:created_at, :lt, 2.days.ago)
Pour toutes les prédictions, vérifiez le documentation ou code source . Cette portée ne casse pas le where
chaîne. Cela signifie que vous pouvez aussi le faire :
MyModel.custom_scope1.col(:created_at, :lt, 2.days.ago).col(:updated_at, :gt, 2.days.ago).custom_scope2
Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.