2015-10-19 58 views
1

我有兩種模式:網站和狀態在一對多關係中。
我想在我的視圖中列出每個網站的最新狀態,並按狀態遞減列出網站。ActiveRecord ::與最新記錄的內部連接的關係

簡單@websites = Website.joins(:statuses)不會在這種情況下幫助。

我想知道我怎樣才能得到所有加入列狀態的網站的關係,這將等於本網站的最新狀態。

當我想通了,每個對象在這種關係應該是這樣的:

<Website id: 5, domain_url: "http://example.com", created_at: "2015-10-15 10:52:35", updated_at: "2015-10-15 10:52:35", status: 200> 

與導致我將能夠列出視圖狀態,而不在環附加的SQL查詢。

編輯:
我使用MySQL作爲數據庫

回答

2

如果我理解這個問題,你有這樣一種情況:Website有許多Status對象和您想看到的只是最後一個是什麼。

我不知道,如果你正在使用PostgreSQL,你可以很容易地做到這一點在阿雷爾作爲

,你可以調整SQL,使使用windowfirst_value功能這項工作。

你可以在這裏看到這個查詢的一個工作示例。 http://sqlfiddle.com/#!15/9a845/1

ActiveRecord

,你可以做到這一點有:

Website. 
    joins(:statuses). 
    select(<<-SQL) 
    distinct on(websites.id) websites.*, 
    first_value(status) over (partition by website_id 
     order by statuses.created_at desc) status 
    SQL 
+0

我忘了提,我使用的MySQL – Gregy