thinking sphinx 如何检查关联文件是否为 NULL?

How check that associated file is not NULL in thinking sphinx?

我有一个 Product 模型 has_many :images

图像模型有一个照片字段(我使用载波gem存储文件):

class Image < ApplicationRecord
  mount_uploader :photo, DressingUploader
end

这是我的 product_index.rb 文件:

ThinkingSphinx::Index.define :product, with: :active_record do
  indexes name

  has images.pose, as: :image_pose

  join images
end

如何将 images.photo 属性添加到 thinking sphinx 以检查照片是否存在? 我可以添加这一行 where "images.photo IS NOT NULL",但我不需要全局工作的条件。

我尝试做类似

的事情
has "images.photo IS NOT NULL", as: :has_photo, type: :boolean

但是没用

由于您要处理给定产品的许多图片,因此您需要汇总每张图片的照片值。可能是 SUM(CASE) 语句将完成这项工作(这个 应该 在 MySQL 和 PostgreSQL 中工作):

has "SUM(CASE WHEN images.photo IS NULL THEN 0 ELSE 1 END) > 0",
  as: :has_photo, type: :boolean

此解决方案适用于 SQL 支持的索引(您正在使用的索引)。对于任何遇到使用实时索引的人来说,解决方案是不同的......你需要一个方法来引用你的 class:

def has_image_photos
  images.any? { |image| image.photo.present? }
end

然后在索引中:

has has_image_photos, as: :has_photo, type: :boolean