2016-04-22 8 views
0

Ich muss die Anzahl der Anmeldungen jeden Tag zu einer Rails-Anwendung über einen Zeitraum von Tagen erhalten, und kleben sie in einem Array. Ich habe derzeit eine funktionierende Lösung, aber ich bin sicher, es gibt einen viel besseren Weg, dies zu tun, als die Datenbank n mal abfragen zu müssen.Zählen Sie tägliche Anmeldungen über n Tagen mit Rails ActiveRecord

Meine aktuelle Lösung:

signups = [] 

30.times.do |i| 
    day = Time.current - (29.days - i.days) 
    todays_signups = User.where(time_joined: day.beginning_of_day..day.end_of_day).count 
    signups << todays_signups 
end 

User.time_joined ist eine DATETIME Spalte.

Ich bin sicher, es gibt einen viel besseren Weg, dies zu tun, als die Datenbank 30 mal zu schlagen, und ich möchte vermeiden, wenn möglich rohe SQL-Abfragen zu verwenden.

Antwort

1

Sie können es nur über SQL-Abfrage:

User.where(time_joined: your_interval).group("DATE(time_joined)").count 
+0

Sie schnell nicht nur eine winzige Antwort schreiben und dann eine Reihe von Änderungen danach machen. Nehmen Sie sich stattdessen Zeit, um eine gute Antwort zu schreiben – karlingen

+0

@karlingen was ist falsch mit meiner aktuellen Version? – Ilya

+0

Sie haben zuerst die folgende Antwort gepostet: "User.group (" DATE (time_joined) "). Count". Und von da an hast du Änderungen vorgenommen, bis du eine gute Antwort gefunden hast. – karlingen

Verwandte Themen