ruby-on-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 上
解决方案
您可以使用hour_class.default_scoped
. 如果您想忽略任何默认范围,您可以使用hour_class.unscoped
.
推荐阅读
- sql - 卡在 Presto SQL 中的日期函数上
- java - 客户方法的 UnsatisfiedDependencyException
- c# - 如何在 Mvc 核心中回滚数据库上的插入或删除
- python - .py 到没有其他文件的 exe
- latex - 如何在此代码(名片)中垂直居中?
- android - 无法读取 Retrofit 和 RxJava POST 请求的字符串响应
- jquery - jQuery 获取数据并在 HTML 上显示
- vue.js - 量角器失败:元素在 vue2-editor 中不可交互
- python - 如何使用python循环分页API
- c# - 用户加入时不调用 OnJoinedRoom 方法