【问题标题】:Fetch records where all associated records have attribute获取所有关联记录都具有属性的记录
【发布时间】:2013-04-26 09:36:14
【问题描述】:

这是我的课程:

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 查询都是可接受的。

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

【问题讨论】:

    标签: mysql ruby-on-rails ruby-on-rails-3 activerecord


    【解决方案1】:
    Product.where("id not in (select product_id from categories where visible='false')")
    

    希望这会有所帮助。

    【讨论】:

    • 谢谢,但它不起作用:首先,categories 没有category_id 列;其次,如果有一个 ID 为 2 的产品,以及一个可见设置为 false 且 ID 为 2 的类别,即使该产品与该类别无关,它也会被排除在外。
    【解决方案2】:

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

    【讨论】:

    • 谢谢。我想知道,数组减法不会委托给 Ruby 吗?我们有数十万种产品。例如,这样的计算可能会是一场灾难,因为我们需要对其进行分页。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-02-14
    • 2019-11-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多