admin

RAILS:如何查询其每个关联具有不为null的属性的所有对象

sql

我正在使用Rails 3.0.5和PostgreSQL。

我有一个模特Offer,有很多Products

class Offer < ActiveRecord::Base
  has_many  :products
end

class Product < ActiveRecord::Base
   belongs_to :offer
end

当您在第三方服务中注册产品时,该产品的ID会更新。让我们来称呼它吧service_id。我想要一个“报价”范围,该报价范围将获取在第三方服务中注册了每个产品的所有报价。换句话说,我只对要约实例感兴趣,只要它的所有产品都具有服务ID。

报价范围:joins(:products).where("products.service_id is not NULL"),仅返回具有至少一个不为null的产品的报价。

任何帮助,将不胜感激。

(PS:对不起,标题,我尽力解释了一下。)

编辑:

例如:如果我有2个要约:Offer1和Offer2。Offer1具有乘积p1和p2,Offer2具有乘积p3和p4。假设p1,p2和p3有服务,但p4没有。该查询应仅返回Offer1。


阅读 165

收藏
2021-06-07

共1个答案

admin

这是另一种方法。

Offer.find_by_sql("SELECT * FROM offers o WHERE NOT EXISTS (SELECT * FROM products WHERE products.offer_id = o.id AND service_id IS NULL)")

甚至做一个ORM的想法就是在这种复杂的查询中抽象SQL,我认为最好选择最简单的解决方案,而不要使查询更加复杂。

2021-06-07