我正在使用Rails 3.0.5和PostgreSQL。
我有一个模特Offer,有很多Products。
Offer
Products
class Offer < ActiveRecord::Base has_many :products end class Product < ActiveRecord::Base belongs_to :offer end
当您在第三方服务中注册产品时,该产品的ID会更新。让我们来称呼它吧service_id。我想要一个“报价”范围,该报价范围将获取在第三方服务中注册了每个产品的所有报价。换句话说,我只对要约实例感兴趣,只要它的所有产品都具有服务ID。
service_id
报价范围:joins(:products).where("products.service_id is not NULL"),仅返回具有至少一个不为null的产品的报价。
joins(:products).where("products.service_id is not NULL")
任何帮助,将不胜感激。
(PS:对不起,标题,我尽力解释了一下。)
编辑:
例如:如果我有2个要约:Offer1和Offer2。Offer1具有乘积p1和p2,Offer2具有乘积p3和p4。假设p1,p2和p3有服务,但p4没有。该查询应仅返回Offer1。
这是另一种方法。
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,我认为最好选择最简单的解决方案,而不要使查询更加复杂。