从延迟加载的模型中获取活动记录关系
Get an activerecord relation from a model that is lazy loaded
我知道 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
问题是这会产生不一致的 return 类型。如果事物被切片,则为 ActiveRecord 关系,否则它 return 是一个 ActiveRecord 模型。
如果我在 hour_class
末尾添加 .all
它将变得一致,但此时它会命中数据库。如何在不丢失延迟加载的情况下保持一致?
我在 Rails 5.0.3 和 ActiveRecord 5.0.6
您可以使用 hour_class.default_scoped
。如果您想忽略任何默认范围,您可以使用 hour_class.unscoped
.
我知道 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
问题是这会产生不一致的 return 类型。如果事物被切片,则为 ActiveRecord 关系,否则它 return 是一个 ActiveRecord 模型。
如果我在 hour_class
末尾添加 .all
它将变得一致,但此时它会命中数据库。如何在不丢失延迟加载的情况下保持一致?
我在 Rails 5.0.3 和 ActiveRecord 5.0.6
您可以使用 hour_class.default_scoped
。如果您想忽略任何默认范围,您可以使用 hour_class.unscoped
.