我定义了以下模型:
class Group < ActiveRecord::Base
end
class Person < ActiveRecord::Base
end
class Policeman < Person
end
class Firefighter < Person
end
在Group
内,我想获取所有拥有Policemen
的组,例如:
class Group < ActiveRecord::Base
has_many :policemen
scope :with_policemen, -> { joins(:policemen).uniq }
end
这按预期工作。现在,如果我想获取所有拥有 Policeman
且 status: 3
的群组,我会这样做:
class Group < ActiveRecord::Base
has_many :policemen
scope :with_policemen, -> { joins(:policemen).where(policemen: { status: 3 }).uniq }
end
但不幸的是,这不起作用,因为 ActiveRecord 使用 policemen
表构建查询,而该表显然不存在。解决方案是在范围内使用 where(people: { status: 3 })
,但我想知道为什么 ActiveRecord 不能将正确的表放在 WHERE 子句中,因为它有必要的关联设置。
最佳答案
根据the docs ,哈希语法的预期格式为 table_name: { column_name: val }
。
scope :with_policemen, -> { joins(:policemen).where(people: { status: 3 }).uniq }
我同意你的观点 - 如果 where 和 join 语法相似,那就更有意义了。另一个不一致之处 - group
方法不采用哈希值,只采用字符串或数组。
关于ruby-on-rails - 使用具有连接条件的 Rails STI 模型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33808989/