ActiveRecord ::与最新记录的内部联接的关系

时间:2015-10-19 14:05:36

标签: ruby-on-rails 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作为数据库

1 个答案:

答案 0 :(得分:3)

如果我理解了这个问题,那么Website会有很多Status个对象,而您正在寻找最后一个对象的情况。

我不知道你可以在Arel中轻松做到这一点

如果您使用的是Postgresql,则可以使用windowfirst_value功能调整SQL以使其工作。

您可以在此处查看此查询的实际示例。 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