Rails中复杂的左外自连接5

时间:2018-04-26 19:42:41

标签: join ruby-on-rails-5

我有一个list_events表,我希望在某个时间之间获得每个用户每个用户的最新事件。这是表格的一个例子。

id   user_id  list_id  event   created_at
1    5        1        sub     13:45
2    1        1        sub     14:01
3    1        2        sub     14:02
4    3        1        sub     14:03
5    4        1        sub     14:04
6    1        1        unsub   14:05

14:00到15:00之间列表1的每个用户的最后事件将是......

id   user_id  list_id  event   created_at
4    3        1        sub     14:03
5    4        1        sub     14:04
6    1        1        unsub   14:05

在我的Rails 5模型中,我编写了这样的查询:

list.events
    .joins("
      left outer join list_events b
        on  list_events.user_id = b.user_id
        and list_events.list_id = b.list_id
        and list_events.created_at < b.created_at
    ")
    .where("b.user_id is null")
    .where(created_at: start..end)

这很好用,但是我想知道是否有办法在没有手工编码连接的情况下编写它。我注意到Rails有一个left_outer_join方法,但没有办法指定自定义on。也许有一个belongs_to

此外,还有一种方法可以将list_events设为a,同时仍然可以利用list.events关系抽象。

0 个答案:

没有答案