在 STI 情况下,我无法解决 default_scope 问题。有什么方法可以防止子类中存在 default_scope 或覆盖查询条件?
class Parent < ActiveRecord::Base
default_scope where(:type => ["Child", "OtherChild"])
scope :flag, where(:flag => true)
end
class Child < Parent
end
class OtherChild < Parent
end
Parent.all => 产生正确的结果,返回所有 Child 和 OtherChild 项。它不会返回具有“RemovedChild”类型的对象,该类型在系统中不再具有模型。
Child.all => 产生正确的结果,所有 Child 结果。
Child.flag.all => Broken,而不是所有具有 flag = true 的 Child,它返回与 Parent.flag.all 相同的结果,添加来自 Parent 类的 default_scope,它替换了 Child 类添加的 type = Child。
我必须假设 Parent 表将包含类型与当前可用类不对应的项目,这是我的默认范围试图解决的问题。如果有一种方法可以全局捕获并忽略 ActiveRecord::SubclassNotFound 的任何实例也可以。