通过关系 has_many 的 ActiveRecord "where" 子句

ActiveRecord "where" clause for has_many through relation

我有两个多对多关系的模型。

一个Capability型号:

class Capability < ApplicationRecord
  …
end

还有一个Teammate:

class Teammate < ApplicationRecord
  has_many :teammate_capabilities
  has_many :capabilities, through: :teammate_capabilities
end

连接模型:

class TeammateCapability < ApplicationRecord
  belongs_to :teammate
  belongs_to :capability
end

现在我想找到至少拥有一组能力中的一个的所有队友。我试过了:

capabilities = Capability.where(id: [197, 198]) # works
teammates = Teammate.where(capabilities: capabilities) # blows up

第二行结果为:

=> PG::UndefinedColumn: ERROR:  column "capability_id" does not exist
LINE 1: ...ROM "teammates" WHERE "teammates"."id" IN (SELECT capability...

我做错了什么?我的查询的正确语法是什么?我想要一个至少能力 197 或能力 198 的所有队友的集合。

Teammate.joins(:capabilites).where(capabilities: {id: capabilities})

需要加入table,然后在where子句中遍历关系。这应该有效。