1

我正在研究具有以下结构的简单 Rails:

    Product
    has_and_belongs_to_many :subscribers

    Subscriber

    has_and_belongs_to_many :products

如何获得所有拥有订阅者的产品,即订阅者 > 0 的产品?

def self.has_subscribers
   #subscribers > 0
end
4

3 回答 3

3

那么你有没有尝试过,

@product.subscribers.count > 0

所以你可以做类似的事情

def has_subscribers?
  subscribers.count > 0 
end
于 2013-10-17T12:44:48.760 回答
0
Product.where( '(select count(1) from products_subscribers where product_id = products.id > 0)')
于 2014-03-03T18:17:56.457 回答
0
def self.has_subscribers
   Product.joins("LEFT JOIN products_subscribers ON products_subscribers.product_id = products.id").where("products_subscribers.product_id IS NOT NULL")
end

高温高压

编辑:我不确定,如果下面会起作用,但你可以试试: def self.has_subscribers Product.joins(:products_subscribers) end 因为joins使用INNER JOIN,它应该只返回那些与加入表products有关系的记录。subscribers

编辑2:仅仅加入加入表可能不起作用(实际上不应该),因为加入表通常没有模型。

以上对我有用,但我忘记GROUP了结果。

Product.joins("LEFT JOIN products_subscribers ON products_subscribers.product_id = products.id").where("products_subscribers.product_id IS NOT NULL").group("products.id")

如果你仍然得到Subscribers,那有点奇怪。请发布您的功能和查询代码。

于 2013-10-17T12:45:16.707 回答