【发布时间】:2017-07-26 11:55:29
【问题描述】:
我有一个应用程序,用户可以在其中为帖子添加书签。为了处理书签,我创建了一个名为 Bookmark 的多态模型。
现在我需要显示所有帖子的列表(假设每页 50 个,分页),并为当前登录的用户显示标题和书签状态。
我脑子里有两个场景,我该如何实现这一点。而且我一个都不喜欢。
- 在呈现列表时检查每个帖子的书签状态 - 这会产生 N+1 查询,总的来说基本上是一个可怕的想法
- 获取当前页面的帖子 ID 列表,获取当前用户
bookmarkable_id IN post_ids_of_current_page的所有书签,检查可书签列表中存在的帖子并根据此显示书签状态。
这一秒很合理,但我真的很想将它全部合并到一个 SQL 查询(如果可能,我不确定是否可以使用 joins 来完成)。这是因为事实上,我没有在常规的 Rails 视图中使用它,而是在 graphql API 端点 + SPA 应用程序中使用它,并且获取集合 ID 并比较它们并不是那么简单。它只会导致对 api 的大量请求,我希望避免。
【问题讨论】:
标签: sql ruby-on-rails activerecord