2017-04-01 46 views
1

我正在構建一個求職者追蹤他們對使用Rails感興趣的工作的系統。我想根據用戶對公司感興趣的級別對公司進行排名,這取決於公司發佈的每個職位中用戶聲明的「興趣水平」的平均值。因此,例如,沃爾瑪可能會發布3份工作,並且用戶將提交他們對每項工作的興趣水平,並且我們通過對這3個興趣水平進行平均來計算沃爾瑪的整體興趣。將有幾個公司有幾個工作。ActiveRecord:基於協會列平均值的訂單表

我的數據庫有2個表:公司和工作,公司有很多工作,有一個公司有一個工作。一份工作還有一個'level_of_interest'屬性,應該用來計算用戶對公司的總體興趣。

有沒有辦法使用ActiveRecord方法來做到這一點?我目前的解決辦法是:

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

,然後使用Ruby來公司拉出來的結果散列的,但我覺得可能有辦法用ActiveRecord做純粹。

DB是PG,fwiw。

回答

2

像這樣的東西應該工作:

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

我得到的是邏輯,但它不工作,我的SQL知識是沒有強大到足以解決問題。這是錯誤: 'PG :: GroupingError:錯誤:列「jobs.company_id」必須出現在GROUP BY子句中或用於聚合函數中 LINE 1:SELECT jobs.company_id,avg(jobs.level_of_interest)FROM 「co ...' – samlandfried

+0

@Landfried:我編輯了上面的例子 - 看看它是否適合你:-) – gwcodes

+0

就是這樣!謝謝。 – samlandfried