快速概要。選擇與所有給定記錄有關係的記錄
祭有屬於許多功能 功能已屬於許多產品
我想發現腦水腫ALL所選功能的所有產品。
實施例:
- 的Offering_1具有特徵1
- 的Offering_2具有特徵2
- 的Offering_3具有特徵1和特徵2
- 的Offering_4具有特徵1,特徵2和功能3
當我打電話Offering.with_features([1,2,3])
我期望找到只有這個Offering_4是因爲是唯一一個具有三個特徵的。
這似乎是一個愚蠢的問題,但我不能找到一個很好的連接,它返回的結果。所有加入我測試過returs有給定特徵的任何,不ALL的產品。
想法?
UPDATE
繼doublea的意見,我創建了自己的ID表,而不是連接的表。 它的解決方案仍然有效,我已經這樣實施:
# offering.rb
def self.with_features(features)
if features && features.any?
where(id: FeatureOfferingRelation.with_all_features(features).pluck(:offering_id))
else
scoped
end
end
# feature_offering_relation.rb
def self.with_all_features(features)
select(:offering_id)
.where(feature_id: features)
.group(:offering_id)
.having("count(distinct feature_id) = ?", features.size)
end
它的作品!但我會接受使用連接而不是子查詢的其他想法。
連接表的名稱是什麼?原生SQL查詢是否足夠? – doublea
連接表是'features_offerings',遵循導軌的約定。 當然,一個sql語句應該足夠了。我應該能夠將其翻譯成AR查詢語言。 –
很高興看到這不是一個愚蠢的問題,因爲目前還沒有答案。 –