ruby-on-rails - 使用具有连接条件的 Rails STI 模型

标签 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

这按预期工作。现在,如果我想获取所有拥有 Policemanstatus: 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/

相关文章:

ruby-on-rails - 如何重定向到 Rails 中的 404?

jquery - Rails 在 Bootstrap 模式中添加新表单和编辑表单

ruby-on-rails - 导致未定义方法错误的可选参数

ruby-on-rails - ActiveRecord::DangerousAttributeError

ruby-on-rails - 使用find_by_id获取RSpec中不存在的记录时引发RecordNotFound

ruby-on-rails - 连接表有两个复数词。如何正确命名模型和迁移;为了销毁连接表上的孤儿。事件记录

ruby-on-rails - 使用 rails 的管理 gem 自定义字段

ruby-on-rails - Rails 6,服务中的独立 Jbuilder : partials not loading

c# - 将 Ruby 的时间转换为 C#

ruby-on-rails - 错误:执行 gem 时 ...(Gem::Exception)OpenSSL 不可用