2017-04-01 4 views
1

Ich erstelle ein System für Arbeitssuchende, um Jobs zu verfolgen, die an der Verwendung von Rails interessiert sind. Ich möchte Unternehmen basierend auf dem Grad des Interesses des Benutzers an dem Unternehmen einstufen, das durch die Durchschnittsberechnung des vom Benutzer deklarierten Interessenniveaus für jeden vom Unternehmen veröffentlichten Job ermittelt wird. So könnte Wal Mart zum Beispiel 3 Jobs veröffentlichen, und der Benutzer würde sein Interesse für jeden dieser Jobs angeben, und wir würden das allgemeine Interesse an Wal Mart berechnen, indem wir diese 3 Niveaus von Interesse mitteln. Es wird mehrere Unternehmen mit mehreren Arbeitsplätzen geben.ActiveRecord: Auftragstabelle basierend auf dem Durchschnitt der Spalte einer Assoziation

Meine Datenbank hat 2 Tabellen: Firmen und Jobs, wo ein Unternehmen viele Jobs hat und ein Job ein Unternehmen hat. Ein Job hat auch ein 'level_of_interest'-Attribut, das verwendet werden sollte, um das allgemeine Interesse des Benutzers an einem Unternehmen zu berechnen.

Gibt es eine Möglichkeit, dies nur mit ActiveRecord-Methoden zu tun? Meine aktuelle Lösung ist:

Job.group('company_id').average(:level_of_interest) 

Und dann Rubin mit den Unternehmen aus dem resultierenden Hash zu ziehen, aber ich denke, es ist wahrscheinlich ein Weg, um es rein mit Active zu tun.

DB ist PG, fwiw.

Antwort

2

So etwas sollte funktionieren:

Company.select('companies.id, avg(jobs.level_of_interest)') 
     .joins(:jobs) 
     .group('companies.id') 
     .order('avg(jobs.level_of_interest) desc') 
+0

mir die Logik, dass, aber es funktioniert nicht und meine SQL-Kenntnisse sind nicht stark genug, um zu beheben. Dies ist der Fehler: 'PG :: GroupingError: Fehler: Spalte" jobs.company_id "muss in der GROUP BY-Klausel oder in einer Aggregatfunktion Zeile 1: SELECT jobs.company_id, avg (jobs.level_of_interest) FROM verwendet werden "co ...' – samlandfried

+0

@Landfried: Ich habe das obige Beispiel bearbeitet - sehen Sie, ob das für Sie funktioniert :-) – gwcodes

+0

Das war's! Danke. – samlandfried

Verwandte Themen