通过关系 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子句中遍历关系。这应该有效。
我有两个多对多关系的模型。
一个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子句中遍历关系。这应该有效。