2013-04-26 32 views
4

这里是我的班记录:提取所有相关的记录有属性

class Product < ActiveRecord::Base 
    has_and_belongs_to_many :categories 
end 

class Category < ActiveRecord::Base 
    has_and_belongs_to_many :products 
end 

类别有visible booloean。

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

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

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

回答

0

你可以尝试找出所有产品有:可见为false.Then减去所有产品。 Product.all - Product.where('categories.visible=?', false).includes(:category)

+0

谢谢。 我想知道,是不是将该数组减法委托给Ruby?我们有数十万种产品。例如,这样的计算可能会是一场灾难,因为我们需要对其进行分页。 – amencarini 2013-04-26 10:14:00

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

希望这有助于。

+0

谢谢,但它不起作用:首先,'categories'没有'category_id'列;其次,如果产品的ID为2,而类别的可见性设置为false且ID为2,即使产品与该类别无关,也会被排除。 – amencarini 2013-05-26 12:21:52

相关问题