如何在Rails中计算has_and_belongs_to_many?

时间:2013-10-17 12:21:06

标签: ruby-on-rails activerecord ruby-on-rails-3.2 ruby-on-rails-4

我正在开发一个具有以下结构的简单Rails:

    Product
    has_and_belongs_to_many :subscribers

    Subscriber

    has_and_belongs_to_many :products

如何获得所有订阅者的产品? 0?

def self.has_subscribers
   #subscribers > 0
end

3 个答案:

答案 0 :(得分:3)

你有没有尝试过,

@product.subscribers.count > 0

所以你可以做点什么

def has_subscribers?
  subscribers.count > 0 
end

答案 1 :(得分: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

HTH

编辑:我不确定,如果下面会有效,但您可以尝试一下: def self.has_subscribers        Product.joins(:products_subscribers)     结束 由于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,那就有点奇怪了。请发布您的功能并查询代码。

答案 2 :(得分:0)

Product.where( '(select count(1) from products_subscribers where product_id = products.id > 0)')