2015-10-19 55 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