2011-12-08 21 views
20

¿Cómo puedo modificar la consulta a continuación para seleccionar solo los registros creados en los últimos 7 días?Registros de recuento creados en los últimos 7 días

self.favorites.count 

Esta función se encuentra en mi modelo User.

def calculate_user_score 
    unless self.new_record? 
     self.score = (self.links.count * 5) + (self.favorites.count * 0.5) 
    end 
    end 

Respuesta

40

Se puede añadir un where innecesaria cualquier condición de esta manera:

self.favorites.where('created_at >= ?', 1.week.ago).count 

Y para su método calculate_user_score, es probable que quieren hacer eso por links así:

def calculate_user_score 
    unless new_record? 
    self.score = (links.where('created_at >= ?', 1.week.ago).count * 5) + 
     (favorites.where('created_at >= ?', 1.week.ago).count * 0.5) 
    end 
end 
1
self.links.where("created_at > ?", Time.now-7.days).count 
7

Le recomiendo que agregue un alcance a su modelo:

class User < ActiveRecord::Base 

    scope :recents, where("created_at > ?", Time.now-7.days) 

end 

A continuación, puede hacer

self.favorites.recents.count 
+0

para una buena separación –

4

En rieles 4+

Este código no parece trabajar:

"created_at > ?", Time.now-7.days 

traté como:

scope :recent, -> { where("DATE(created_at) > ?", (Date.today).to_time - 7.days) } 
Cuestiones relacionadas