通过关系has_many的活动记录"where"子句



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

一种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})

您需要联接表,然后遍历where子句中的关系。这应该行得通。

最新更新