2012-12-21 5 views
5

Ich habe Modell Register, die die Anwesenheit von Benutzer basierend auf Abteilung und Gruppe markiert. Jeder Benutzer hat eine Abteilung und Gruppe.Schienen 3: Wie summiere ich Datensatz

Register Modell

date:date , departmentid:string , groupid:integer , one:integer , two:integer 

unter den oben genannten Bereichen „eins und zwei“ sind Zeitschlitze (sprich: 9-14, 14-18) .Attendance sind so markiert, dass der Benutzer den aktuellen Zeitpunkt gehört, groupid Für denselben Tag gibt es mehrere Einträge mit Groupid, DepartmentID und deren Anwesenheit.

Abtastregister Tabelle unten

enter image description here

ich nicht finden wollen. von Benutzern, die pro Tag besucht werden. zur Zeit habe ich versucht,

@register = Register.where(:date=>"2012-12-28").sum(:one) 

es ist gut bekommen, aber ich will wie finden,

@register = Register.where(:date=>"2012-12-28").sum(:one , :two ,:three) 

ist es möglich ....

Vielen Dank im Voraus.

Antwort

2

Wie wäre das?

class Register < AR:Base 

... 

    def self.attendee_count(slot) # slot is :one or :two 
    scoped.group(:date).sum(slot) 
    end 

end 

Register.where(:date => Date.today).attendee_count(:one) 
Register.where(:date => Date.today, :departmentid => "DP14").attendee_count(:two) 
+0

danke für den obigen Code .. ... Ist es möglich, so zu finden .. Registrieren.wo (: Datum => Datum.heute,: AbteilungsID => "DP14") .Anzahl_Anzahl (: Eins,: Zwei,: Drei) ... Wenn ja, was sollte ich im Modell schreiben. – Cyber

+0

So etwas wie: '[: Eins,: Zwei,: Drei] .map {| Slot | Register.where (: date => Date.today,: domain => "DP14"). Timer_count (slot)}. Sum' nach [der Sum-Methode des Enumerable] (http://api.rubyonrails.org/classes /Enumerable.html#method-i-sum). Dies wird jedoch 3 Abfragen machen. Ich denke nicht, dass Sie es mit einer einzigen Abfrage leicht tun können. – systho

0

Funktioniert das?

Department.group (: Datum) .sum (: ein,: zwei)

+0

„DepartmentID“ ist nur ein Feld in Benutzern table.There kein Assosiation zwischen Benutzer und Department.Hope Ihrem obigen Code wird nur die Anzahl der Einträge, nicht die Summe aller Einträge in Tabellenfeld „ein finden oder zwei " – Cyber

+0

Sorry, ich missverstanden. Lassen Sie mich aktualisieren – Rahul

+0

Ich habe meine Post aktualisiert es ist keine Abteilung, es ist Register tatsächlich.sorry..Ihr Code wird Register.Group (: Datum) .SUM (: Eins,: zwei) .. – Cyber