活动记录获取具有一组特定相关模型(而不是 OR)的所有模型



我有一个汽车数据库,这些汽车具有特定的功能(如座椅加热,LED灯,空调等(。

模型设置如下:

class Car < ApplicationRecord
has_many :car_key_features
has_many :key_features, through: :car_key_features
end
class CarKeyFeature < ApplicationRecord
belongs_to :car
belongs_to :key_feature
end
class KeyFeature < ApplicationRecord
has_many :car_key_features
has_many :cars, through: :car_key_features
end

我现在想获得所有具有特定功能的汽车。例如,我想获取所有具有标识符为"座椅加热"和"LED 灯"功能的汽车(但它也可能具有其他功能(。

我尝试使用以下查询,但这给了我所有至少具有一项功能的汽车,而不是全部(因为它会导致 SQL"IN"查询(:

scope :by_key_features, ->(identifiers) { joins(:key_features).where(key_features: { identifier: identifiers }).group('cars.id') }

任何这方面的帮助将不胜感激!

您的查询将选择至少具有一个匹配要素的所有汽车。因此,您只需要选择与查询中具有相同数量的所有要素的汽车。

scope :by_key_features, ->(identifiers) {
joins(:key_features)
.where(key_features: { identifier: identifiers })
.group('cars.id')
.having('COUNT(key_features.id) >= ?', identifiers.size) 
}

相关内容

  • 没有找到相关文章

最新更新