4

这是我的课程:

class Product < ActiveRecord::Base
  has_and_belongs_to_many :categories
end

class Category < ActiveRecord::Base
  has_and_belongs_to_many :products
end

类别有一个visible布尔值。

我需要创建一个范围,Product以便我可以获得所有类别都可见的所有产品(即:如果一个产品有 10 个类别,甚至一个类别visible设置为 false,范围应该丢弃该产品)。

ActiveRecord 调用和 MySQL 查询都是可以接受的。

编辑:我们有数十万种产品,我们需要将此操作委托给数据库,因为我们必须进行分页,对这一系列产品的喜欢进行排序。

4

2 回答 2

1
Product.where("id not in (select product_id from categories where visible='false')")

希望这可以帮助。

于 2013-05-16T17:52:32.423 回答
0

您能否尝试找出所有具有 :visible 为 false 的产品。然后从所有产品中减去它。 Product.all - Product.where('categories.visible=?', false).includes(:category)

于 2013-04-26T10:03:04.050 回答