2010-11-03 8 views
1

Je suis en train de construire une requête qui effectue les opérations suivantes:Rails - requête pour regrouper résume

  • L'objectif: montrer le nombre total de visites à tous les produits de la société chaque jour ce mois-ci.
  • Premièrement: Nous trouvons tous les utilisateurs qui appartiennent à @ company.product (chaque utilisateur a un product_id).
  • Additionnez tous les comptes de visites parmi ces utilisateurs, en les regroupant par jour, pour chacun des 30 derniers jours.
  • Pour présenter ces sommes visit_count sous la forme d'une chaîne de 30 valeurs séparées par des virgules (23,26,21,63,21,42 etc.) dans la vue.

Jusqu'à présent (aucune somme encore):

#controller 
@visits = User.group("date(created_at)").having("product_id IN (?) AND created_at > ?", @company.products.select("id"), 1.month.ago).order("created_at").select("visit_count") 
    # this simpler version causes error: undefined method 'empty?' for 2010-10-03 17:55:57 UTC:Time 
    @visits = User.group("created_at").having("date(created_at) > (?)", 1.month.ago) 

#view: 
<%= @visits.map(&:visit_count).join(",") 

La requête ci-dessus soulève une erreur (3 arguments pour 2), mais j'ai essayé beaucoup de combinaisons semblables à cela et je continue à avoir des erreurs. Je ne suis pas trop expérimenté avec ActiveRecord. Comment écrirait-on cette requête? Merci beaucoup.

Répondre

1

Cela fonctionne pour moi ...

User.group("DATE(created_at)").having(['created_at > ?', 1.month.ago]).count 

rendements ...

=> {"2011-01-19"=>2, "2011-01-27"=>1} 
+1

Cette offre pas pour vous? Qu'est-ce que cette déclaration a renvoyé? –

Questions connexes