选择没有至少一个嵌套的模型的Rails活动记录范围有很多

时间:2014-12-24 15:22:32

标签: sql ruby-on-rails activerecord spree

我正在与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;

1 个答案:

答案 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