从延迟加载的模型获取ActiveRecord关系

时间:2019-02-07 20:34:09

标签: ruby-on-rails ruby activerecord rails-activerecord

我知道ActiveRecord具有延迟加载的查询,您可以在其中向现有查询添加过滤器,并在最后调用该查询。

示例:Model.where(filter1:true).where.not(filter2:true).....

在我的代码中,我有一个条件,可以在查询中添加切片过滤器(如果应切片),如果未切片则使用其他模型。代码如下:

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,它将变得一致,但是此时它将到达数据库。如何在不丢失延迟加载的情况下保持一致?

我正在使用Rails 5.0.3和ActiveRecord 5.0.6

1 个答案:

答案 0 :(得分:3)

您可以使用hour_class.default_scoped。如果要忽略任何默认范围,可以使用hour_class.unscoped