当 STI 与连接查询一起使用时,sql 中使用了错误的 class 类型

Wrong class types used in sql when STI used with join query

我最近从 Rails 4.1.4 升级到 4.2.8,但出现了非常奇怪的行为。 所以我们有 table class Identity < ActiveRecord::Base 和 tables Doctor, Assistant, Substitute 是继承自它的。

因此,当我不在任何这些 classes 范围内并调用(rails 控制台,规格)

Doctor.all.to_sql => "SELECT \"identities\".* FROM \"identities\" WHERE \"identities\".\"type\" IN ('Doctor')" 这很好。

当我从助手模型中的 class 方法执行相同的调用时,它会产生以下内容 Doctor.all.to_sql => "SELECT \"identities\".* FROM \"identities\" WHERE \"identities\".\"type\" IN ('Assistant', 'Substitute')" 这是错误的。

当我在 Assistant 模型中的 class 方法中并执行

Doctor.unscoped.all => "SELECT \"identities\".* FROM \"identities\" WHERE \"identities\".\"type\" IN ('Doctor')" 很好的查询。

我检查过我们是否在某处设置了 default_scope,但我们没有。而且,这很棘手,就像我做的那样 SomeTable.joins(:identities) 我无法取消 identities 的范围,这导致我查询错误。

所以,我不太确定升级后发生了什么,但我知道它确实适用于旧的 Rails 4.1.4。

任何提示都会有所帮助。

Regads

升级到 Rails 4.2.11 后,问题消失了。 我将付出更多努力在旧版本上重现此行为,并在必要时向 rails 团队报告。