我正在与Spree合作。在狂欢中,Product
有许多Variants
,其中包含许多Images
。
我想向Product
添加一个范围,该范围仅返回在其任何变体上没有至少一个图像的产品。这是为了帮助管理员找到放置图像所需的产品。我需要通过sql范围与类似select
之类的方法来实现,因为范围在进入ransack search gem之前应用于集合。
Raw SQL可能如下所示:
SELECT DISTINCT * FROM Spree_Products AS P JOIN Spree_Variants AS V ON P.id = V.product_id LEFT JOIN Spree_Assets AS A ON V.id = A.viewable_id WHERE A.id is null;
答案 0 :(得分:1)
scope :your_scope, -> do
where("spree_products.id IN (
SELECT product_id FROM spree_variants WHERE (
spree_variants.id NOT IN (
SELECT viewable_id FROM spree_assets
)
)
)")
end