我有一个rails连接表,它位于两个模型superhero
和superpower
之间。现在我有3个不同的superpower id
,我想要所有的superheroes
,其中有所有的选择superpowers
为了做到这一点,我正努力做到以下几点:
matches = Superhero.all
matches = matches.joins(:superpowers).where('superpowers.id = ?', 17).where('superpowers.id = ?', 12).where('superpowers.id = ?', 6)
但是这给了我一个空对象,即使我有一个
superheroes
,它在我的联接表中有所有给定的superpowers
。从上面生成的查询是:
SELECT "superheroes".* FROM "superheroes" INNER JOIN "superheroes_superpowers" ON "superheroes_superpowers"."superhero_id" = "superheroes"."id" INNER JOIN "superpowers" ON "superpowers"."id" = "superheroes_superpowers"."superpower_id" WHERE (superpowers.id = 17) AND (superpowers.id = 17) AND (superpowers.id = 12) AND (superpowers.id = 6)
所以奇怪的是,它试图两次检查id为17的
superpower
(但我认为它不应该影响结果),而查询的其余部分似乎是正确的。 最佳答案
尝试使用in子句
superpowers_ids = [17,12,6]
matches = Superhero.all
matches = matches.joins(:superpowers).where('superpowers.id in (?)', superpowers_ids)