繁体   English   中英

Active Record查询通过关系查找与Rails has_many中的所有条件匹配的记录

[英]Active Record query to find records that match all conditions in Rails has_many through relationship

我有两个模型,分别是Apartment和Amenities,它们通过ApartmentAmenities关联。 我正在尝试实现一个过滤器,在该过滤器中,我仅显示具有所有指定便利设施的公寓。

class Amenity < ActiveRecord::Base  
  has_many :apartment_amenities
  has_many :apartments, through: :apartment_amenities
end

class ApartmentAmenity < ActiveRecord::Base
  belongs_to :apartment
  belongs_to :amenity
end

class Apartment < ActiveRecord::Base
  has_many :apartment_amenities
  has_many :amenities, through: :apartment_amenities
end

我有一个查询工作,它将返回所有至少匹配给定设施的设施之一的公寓,如下所示:

Apartment.joins(:apartment_amenities).where('apartment_amenities.amenity_id IN (?)', [1,2,3])

但这不是我想要的。

好吧,在放弃几天然后回到它上面之后,我终于找到了这个问题: 如何查找通过对象包含has_many的记录包含某个列表的所有对象的记录?

这使我想到了正确的答案:

  def self.with_amenities(amenity_ids)
    where("NOT EXISTS (SELECT * FROM amenities
      WHERE NOT EXISTS (SELECT * FROM apartment_amenities
        WHERE apartment_amenities.amenity_id = amenities.id
        AND apartment_amenities.apartment_id = apartments.id)
      AND amenities.id IN (?))", amenity_ids)
  end

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM