gpt4 book ai didi

ruby-on-rails - 如何在事件提要中对类似项目进行分组

转载 作者:行者123 更新时间:2023-12-04 05:42:52 25 4
gpt4 key购买 nike

对于社交网站,我有一个您关注的人的事件事件,我想将短时间内发生的相似类型的事件组合在一起,以获得更紧凑的事件提要。想象一下,当您快速连续“喜欢”几件事时,Facebook 如何显示一个逗号分隔的列表:“乔喜欢啤酒、足球和薯条”。

我理解在 ActiveRecord Enumerable 结果上使用 group_by 方法,但是需要完成一些初始工作来填充我可以稍后分组的属性。我的问题涉及以可以标记这些分组的方式存储事件数据,然后再次检索它们。

现在我有一个事件模型,它是提交事件的用户与其链接到的项目之间的联接关联(在我上面的示例中,假设“啤酒”、“足球”和“筹码”是像模型)。除了“喜欢”之外,还有其他事件类型(事件、保存收藏夹等)。我正在考虑的是,在创建此关联时,会在该类型的最后一次关联完成时进行检查,如果它是在某个时间段之前进行的,则增加作为一部分的“事件块”计数器事件模型。稍后,在呈现此事件提要时,我可以按用户分组,然后键入,然后是此事件块计数器。

示例:假设在同一天内进行了 2 个更新块。用户在 2:05 喜欢 2 件事,然后在 5:45 喜欢 3 件事。第三次更新(第二个块的开始)发生在 5:45 之后,模型检测到时间过长,并将其事件块计数器增加 1,从而在通过group_by 调用:

2:05 Joe likes beer nuts and Hooters.

5:45 Joe likes couches, chips and salsa.

7:00 Joe is attending the Football Viewing Party At Joe's

我的第一个问题:增加这样的计数器的有效方法是什么?它不再是 auto_increment,所以我能想到的最简单的事情就是查看最后一条记录的计数器作为引用点。但是,这不能来自检查该类型的上次更新时间的同一查询,因为其他类型的后续更新可能已经收到下一个计数器值。它们不必是全局唯一的,但那会很好。

我想到的另一个整体策略是另一个名为 ActivityBlock 的模型,它将类似事件的组连接在一起。在许多情况下,更新会被自己隔离,因此为每个单独的事件创建一个记录似乎有点低效。

这两个看起来像是一个可靠的策略吗?

我的最后一个问题是关于分页的。现在我们正在处理块,在分页开始之前,很难始终准确地显示一定数量的条目。无论是单个(独立的)Activity 更新,还是 then 的块都应计为 1,因此最低在我的 group_by 层,我可以合并一个计数器来跟踪我显示的行数,但这意味着我不能再只进行一个数据库查询并简单地指定一个限制语句。有什么方法可以做到这一点,而无需重复执行额外的 SQL 查询,直到达到我的页面限制?

这将是 ActivityBlock 模型方法的一个优点,因为我可以轻松地对其应用限制调用,并且块也可以包含自动增量计数器。

最佳答案

退房 http://railscasts.com/episodes/406-public-activity
他还在第 407 集中发布了一个关于如何从头开始做这件事的帖子(虽然这是专业剧集)。

关于ruby-on-rails - 如何在事件提要中对类似项目进行分组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4174995/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com