2010-08-21 4 views
0

J'ajoute des données à un db et j'ai seulement besoin de vérifier les données dupliquées dans les 30 dernières minutes ou plus .Rails: comment utiliser les conditions et laisser seulement le DB regarder 100 enregistrements profonds, je ne cherche pas de limite

Les données sont ajoutées à environ 10 entrées par menu, donc j'ai seulement besoin de rechercher environ 300 enregistrements. Comment puis-je obtenir cela dans des conditions avec des rails Model.find (: all,: conditions => [])?

+0

Insérez-vous les enregistrements en utilisant Rails? Si ce n'est pas le cas lors de l'insertion directe, vous devez vous assurer que vous ajoutez l'horodatage à l'enregistrement. – Jagira

+0

Quelle version de Rails utilisez-vous? – spickermann

Répondre

3

Model.find (tous,: conditions => [ "? Created_at>", 30.minutes.ago])

+0

Comment le db sait-il si un enregistrement a été créé il y a 30 minutes? – s84

+0

sql je devrais dire – s84

+1

Lors de la création d'un nouvel enregistrement, rails ajoute par défaut un horodatage aux colonnes created_at et updated_at ... – Jagira

0

Vous devriez ajouter une condition fondée sur l'âge des données. Par exemple 'created_ad>?', 30.minutes.ago

+0

même chose qu'avec Jagira, sql doit-il boucler tous les records pour trouver l'âge du disque? – s84

+1

pas si vous ajoutez un index sur cette colonne dans la base de données. –

+0

Dépend de la configuration de votre table. En général oui, mais vous pouvez ajouter un index (même un cluster si votre base de données le supporte et vous n'avez pas d'autres requêtes/index) sur cette colonne, donc la base de données ne fera pas une analyse de table complète. L'utilité d'un index dépend aussi de la taille de vos lignes et de la taille de votre base de données (par exemple, il ne sert à rien d'utiliser un index si vous n'avez pas assez de données dans votre table) – Zaki

0

J'ai essayé la réponse acceptée, mais l'API Rails a peut-être changé. J'utilise 3.1.3. Cela a fonctionné pour moi:

Model.where(:updated_at => (30.minutes.ago.utc)..Time.now.utc) 

UTC partie dépendrait de la façon dont vous stockez vos dates.

Questions connexes