使用包含多个关联和单独的条件

Using includes with multiple associations and separate conditions

我的 Gallery 模型中有以下查询:

media_items.includes(:photo, :video).rank(:position_in_gallery)

我的 Gallery 模型 has_many Media Items 每个模型都有 PhotoVideo 关联。

到目前为止一切正常。它 returns 所有 media_items 包括他们的 photovideo 关联,按 media_itemposition_in_gallery 属性排序。

但是我现在需要将此查询返回的照片限制为仅具有 is_processing 属性的照片,即 nil.

是否可以进行相同的查询,但条件是返回的照片等同于:

.where(photo: 'photo.is_processing IS NULL')

请注意,无论如何都应返回所有视频,并且不包含 is_processing 属性。

我试过@mudasbwa 的建议:

includes(:photo, :video).where('photos.is_processing IS NULL').rank(:position_in_gallery)

但它让我:

ERROR: missing FROM-clause entry for table "photos"

事实证明我走对了路。我需要使用 references():

media_items.includes(:photo, :video).where('photos.is_processing IS NULL').references(:photo).rank(:position_in_gallery)

如果您想使用没有 SQL 个字符串的纯 ActiveRecord:

media_items.includes(:photo, :video).where(photos: { is_processing: nil }).rank(:position_in_gallery)