2014-01-17 48 views
3

的最新記錄,我試圖創建一個使用(導軌)的ActiveRecord在Postgres的查詢,但似乎無法來解決這個問題。得到一個的has_many關係

一個公司有很多頁,而我試圖讓所有公司的最新頁面。

我試圖

Page.select('DISTINCT company_id') 

這給了我1頁的所有公司。但是,這是不是最新的(created_at ASC)

所以,我想

Page.select('DISTINCT company_id').order('created_at ASC') 

自創建以來,在不選擇其中給出了一個錯誤。但是如果我添加它,我會返回所有記錄。

所以,我想

Page.group('company_id').select('company_id').order('created_at ASC') 

但是,這給出了一個錯誤,那created_at應在GROUP BY或聚合功能。

通過,增加created_at到組給出了事與願違的結果(多頁,同一家公司的)

任何幫助嗎?

編輯:

我想這是一個範圍,我需要鏈中的範圍以後。

回答

2

您可以使用pluckuniq

Page.order('created_at ASC').pluck(:company_id).uniq 

你可以試試這個來得到一個ActiveRecord::Relation

Page.select('max(id) as id, company_id').group(:company_id) 

我會使用id來確定頁面的「最近」而不是created_atid越高,頁面越近。使用上面的代碼,您可以簡單地通過company_id獲得最高頁面id

+0

我喜歡創建範圍(因此它返回ActiveRecord的關係),所以可連鎖它。基本上我想要例如Page.unique_for_companies.active或類似的 – Jareish

+0

好的,我會更新我的答案。那麼你必須在'created_at'上使用'group'和一個聚合函數。 – Mischa

+0

@Mischa我不確定你的解決方案。因爲它會從頁面表中提供唯一的company_id。它不會爲每個公司提供最新創建的頁面 –