使用带有连接条件的Rails STI模型

时间:2015-11-19 16:13:05

标签: ruby-on-rails ruby activerecord sti

我定义了以下模型:

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 的所有群组,我会这样做:

policemen

但不幸的是,这不起作用,因为ActiveRecord使用where(people: { status: 3 })表构造查询,这显然不存在。解决方案是在范围内使用{{1}},但我想知道为什么ActiveRecord不能在WHERE子句中放置正确的表,因为它具有必要的关联集。

1 个答案:

答案 0 :(得分:2)

根据the docs,哈希语法的预期格式为<div class="container-fluid" style="text-align:center; background-color: #f6f6ff;"> <div class="col-md-offset-1 col-sm-12 col-md-10" style="background-color: #f6f6ff;"> <img src="media/subversion_logo-384x332.png" alt="Subversion" height="150" width="150"> <h1>2</h1> <img src="media/github.png" alt="GitHub" height="150" width="150"> </div> </div>

table_name: { column_name: val }

我同意你的观点 - 如果where和join语法类似,那就更有意义了。另一个不一致 - scope :with_policemen, -> { joins(:policemen).where(people: { status: 3 }).uniq } 方法不采用哈希,只采用字符串或数组。