Rails - SQL查询返回所有具有所有指定相关对象的对象(has_many通过)
这是我的第一个问题。Rails - SQL查询返回所有具有所有指定相关对象的对象(has_many通过)
我想建立一个查询,它会给我所有具有所有指定功能的主题。
我有三个型号的主题,特色和ThemeFeatures
主题的has_many:特点,:通过=>:theme_feautures
比方说有一个主题对象(ID:1,名称: “theme_a” )在DB中。 (id:2,name:“feature_b”),(id:3,name:“feature_c”)]
查询应该像这样工作:Theme.the_query(:features => {:id => [1,2]}),结果是主题,但是当我把ids这种方式Theme.the_query(:features => {:id => [2,4]})结果应该是零。我已经构建了Theme.joins(:features).where(:features => {:id => features_array_ids}),但它返回所有具有任何features_array_ids元素的主题。如果features_array_ids = [2,4]它返回主题,但我不想那样。
对于语法错误,我很抱歉,我希望你明白我的意思。
编辑:
发现的解决方案
Theme.select("*").from("themes").joins("INNER JOIN theme_features ON themes.id = theme_features.id").where("EXISTS(SELECT theme_id FROM theme_features tf WHERE tf.feature_id IN (#{features_array_ids.join(", ")}) AND tf.theme_id = themes.id GROUP BY tf.theme_id HAVING COUNT(*) = #{features_array_ids.count})")
回答:
解决方案。
Theme.select("*").from("themes").joins("INNER JOIN theme_features ON themes.id = theme_features.theme_id").where("EXISTS(SELECT theme_id FROM theme_features tf WHERE tf.feature_id IN (#{features_array_ids.join(", ")}) AND tf.theme_id = themes.id GROUP BY tf.theme_id HAVING COUNT(*) = #{features_array_ids.count})")
以上是 Rails - SQL查询返回所有具有所有指定相关对象的对象(has_many通过) 的全部内容, 来源链接: utcz.com/qa/258290.html