我在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 =&gt;生成正确的结果,返回所有Child和OtherChild项。它不返回具有“RemovedChild”类型的对象,该类型在系统中不再具有模型。
Child.all =&gt;产生正确的结果,所有Child结果。
Child.flag.all =&gt;破坏,而不是所有Child的with flag = true它返回与Parent.flag.all相同的结果,从Parent类添加default_scope,替换Child类添加的type = Child。
我必须假设Parent表将包含一个类型与当前可用类不对应的项,这是我的默认作用域试图解决的。如果有一种方法可以全局捕获并忽略任何可以工作的ActiveRecord :: SubclassNotFound实例。
答案 0 :(得分:1)
要延迟范围解析和解决方法,您可以切换到定义类方法而不是范围。
class Parent < ActiveRecord::Base
default_scope where(:type => ["Child", "OtherChild"])
def self.flag
where(:flag => true)
end
end