我知道的ActiveRecord具有延迟加载查询,您可以添加过滤器,以已有的查询和查询称为底。
例如:Model.where(过滤器1:真).where.not(过滤器2:真).....
在我的代码,我有一个条件,增加了一个切片过滤器,以查询是否应该被切片,以其他的模式,如果它不是切片。代码如下:
def base_query
@base_query ||= slice? ? slice_class.where(slice_value: @slice.value, slice_type: @slice.type) : hour_class
end
问题是,这产生了不一致的返回类型。一个ActiveRecord关系,如果事情是切片否则返回ActiveRecord模型。
如果我在.all
的末尾添加hour_class
它将成为一致的,但它会打击DB在这一点上。如何让我不失懒加载此一致?
我on Rails的5.0.3和5.0.6的ActiveRecord
您可以使用hour_class.default_scoped
。如果你想忽略任何默认范围,您可以使用hour_class.unscoped
。