我有两种模式:一对多关系中的网站和状态。
我想在我的视图中列出每个网站的最新状态,并按状态减少列出网站。
简单@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作为数据库
答案 0 :(得分:3)
如果我理解了这个问题,那么Website
会有很多Status
个对象,而您正在寻找最后一个对象的情况。
我不知道你可以在Arel中轻松做到这一点
如果您使用的是Postgresql,则可以使用window和first_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