我正在研究具有以下结构的简单 Rails:
Product
has_and_belongs_to_many :subscribers
Subscriber
has_and_belongs_to_many :products
如何获得所有拥有订阅者的产品,即订阅者 > 0 的产品?
def self.has_subscribers
#subscribers > 0
end
我正在研究具有以下结构的简单 Rails:
Product
has_and_belongs_to_many :subscribers
Subscriber
has_and_belongs_to_many :products
如何获得所有拥有订阅者的产品,即订阅者 > 0 的产品?
def self.has_subscribers
#subscribers > 0
end
那么你有没有尝试过,
@product.subscribers.count > 0
所以你可以做类似的事情
def has_subscribers?
subscribers.count > 0
end
Product.where( '(select count(1) from products_subscribers where product_id = products.id > 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
,那有点奇怪。请发布您的功能和查询代码。