了解协会是否存在的最佳方法是什么?

时间:2014-05-17 11:13:21

标签: ruby-on-rails associations

我必须检查user是否photos,所以我正在做

current_user.photos.blank?

它运作良好,但这是非常无效的,因为它将所有photos加载到内存中(不确定,如果我错了,请纠正我)。

我不想这样做,因为如果

,它会崩溃我的服务器
  1. 用户可以拥有数千张照片
  2. 成千上万的用户访问页面,其中存在current_user.photos.blank?条件类型,因此所有这些代码都需要内存,我猜我的服务器会崩溃。
  3. 我只想检查关联(photos)是否有效,这是全部吗?

    最好的方法是什么?

1 个答案:

答案 0 :(得分:4)

您可以使用ActiveRecord的{​​{3}}或any?方法来执行您想要的操作。这不会返回对象集合,因此不会在内存中加载photos。它会告诉您user是否有任何照片(真或假)。

因此,对于您的示例,您可以使用以下内容:

current_user.photos.any?

在较低级别,exists?any?将查询(通过SQL的LIMIT)限制为单个结果,以便他们可以有效地回答您的问题。

另一方面,

present?将返回所有匹配的对象,这些对象在您的情况下可能是不必要的负载,但可以更好地用于其他匹配对象应该以某种方式使用的情况(例如,迭代在检查它们的存在后不久就在它们之上)。