检索所有相关记录都具有属性的记录

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查询均可接受。

编辑:我们有数十万个产品,我们需要将这些操作委托给数据库,因为我们将对这些产品数组进行分页、排序等操作。

2个回答

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

希望这能有所帮助。

谢谢,但它不起作用:首先,categories没有category_id列;其次,如果有一个id为2的产品和一个visible设置为false且id为2的类别,即使产品与类别无关,它也会被排除在外。 - amencarini

0

你能试着找出所有 visible 属性为 false 的产品吗?然后从所有产品中减去这些产品。 Product.all - Product.where('categories.visible=?', false).includes(:category)


我在想,那个数组减法不是可以交给 Ruby 处理吗?我们有成千上万的产品。这样的计算可能会导致灾难,例如我们需要对其进行分页。谢谢。 - amencarini

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接