从标题开始,我想显示一个用户列表 - 按最近创建的has_many
关联进行排序。ActiveRecord PSQL根据has_many association +分页的最近created_at排序
User
has_many :interactions
我需要能够显示与他们的最后interaction
日期排序的用户 - 一个表,这个表应该(在DB没有使用counter_cache
)显示交互的总数,以及,还包括分页。
,我们一直在使用以前的(不工作)范围是沿User.with_a_bunch_of_scopes.includes(:interactions).order("interactions.created_at DESC")
我已经删除了大部分的尝试的台词,但我已经使用MAX(interactions.created_at)
和分组的各种其他属性试过,但无济于事。
分页是最困难的部分这里 - 看来,除非我搞乱了的东西,即使用:includes
/LEFT OUTER JOIN
适当限制每次互动只有一个用户,然而,似乎是由其他交互作用域。我使用的是雷宝石,但我能够使用limit
和offset
例如复制问题:
Interaction Users sorted_by interactions.created_at
-------------------------
User 1
User 1
User 2
User 3
User 2
User 2
User 4
User 1
User 4
User 3
User 5
给我们:
Page # per 4
Page 1 - [1, 2, 3, 4]
Page 2 - [2, 4, 1, 3]
Page 3 - [4, 3, 5]
尽管我们希望它是:
Page # per 4
Page 1 - [1, 2, 3, 4]
Page 2 - [5]
它恰当地只包括每个用户一次,但是,我当他们已经被包括在前面的页面中时,包括页面上的用户。
任何帮助,非常感谢。我们不时回到现在,然后尝试解决它一段时间,并且永远无法按预期返回。
能否请您发布您的查询?另外,您是否将每个用户的交互次数存储在数据库中(例如,使用'counter_cache')或者只是动态生成它(例如'user.interactions.size')? – mmichael
@mmichael - 用这些更改编辑OP。动态计数(尽管值得牺牲总数,如果我们可以得到排序顺序)并发布我正在使用的基本查询。我已经尝试了很多其他人,但没有任何工作,所以我删除了他们。 – Rockster160