这个问题可能有点具体,但我认为从一般 pov 来看也很有趣。
在 Rails App 中,用户可以订阅其他用户。当我显示用户列表时,我必须检查当前用户是否订阅了列表中的用户。如果他订阅了,我会显示取消订阅按钮,反之亦然。
因为整个事情取决于当前用户,所以我不能使用急切加载。因此,当我在列表中显示 20 个用户时,我在 DB 上生成了 20 个额外的命中,这在我看来是不好的做法。
我正在考虑解决这个问题的好方法。到目前为止,我想出的最佳解决方案是在登录期间加载 current_user 在会话中订阅的用户的 id,然后检查每个 user.id 与会话中的 id。但是,当用户订阅了很多人时,这可能会导致其他问题。此外,我不确定这是否是加载所有订阅的最佳方式,即使用户在此会话期间可能永远不会查看用户列表。
我想到的下一个最好的事情是做同样的事情,但不是在登录期间,而是在加载用户列表时。
你怎么看?