我必须检查user
是否photos
,所以我正在做
current_user.photos.blank?
它运作良好,但这是非常无效的,因为它将所有photos
加载到内存中(不确定,如果我错了,请纠正我)。
我不想这样做,因为如果
,它会崩溃我的服务器current_user.photos.blank?
条件类型,因此所有这些代码都需要内存,我猜我的服务器会崩溃。 我只想检查关联(photos
)是否有效,这是全部吗?
最好的方法是什么?
答案 0 :(得分:4)
您可以使用ActiveRecord
的{{3}}或any?
方法来执行您想要的操作。这不会返回对象集合,因此不会在内存中加载photos
。它会告诉您user
是否有任何照片(真或假)。
因此,对于您的示例,您可以使用以下内容:
current_user.photos.any?
在较低级别,exists?
和any?
将查询(通过SQL的LIMIT
)限制为单个结果,以便他们可以有效地回答您的问题。
present?
将返回所有匹配的对象,这些对象在您的情况下可能是不必要的负载,但可以更好地用于其他匹配对象应该以某种方式使用的情况(例如,迭代在检查它们的存在后不久就在它们之上)。