当 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 团队报告。
我最近从 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 团队报告。