使用包含多个关联和单独的条件
Using includes with multiple associations and separate conditions
我的 Gallery
模型中有以下查询:
media_items.includes(:photo, :video).rank(:position_in_gallery)
我的 Gallery
模型 has_many Media Items
每个模型都有 Photo
或 Video
关联。
到目前为止一切正常。它 returns 所有 media_items
包括他们的
photo
或 video
关联,按 media_item
的 position_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)
我的 Gallery
模型中有以下查询:
media_items.includes(:photo, :video).rank(:position_in_gallery)
我的 Gallery
模型 has_many Media Items
每个模型都有 Photo
或 Video
关联。
到目前为止一切正常。它 returns 所有 media_items
包括他们的
photo
或 video
关联,按 media_item
的 position_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)