sql - Ruby On Rails:如何在单个 SQL 查询中选择父模型的所有子模型以及这些子模型的 Active Storage 附件。活动记录
问题描述
我正在寻找可以为我执行此操作的单个 SQL 查询,这样我就不必对数据库执行如此多的请求。我想选择模型的所有子模型以及属于子模型的活动存储附件。
class Category < ApplicationRecord
has_many :infographics, dependent: :destroy
has_many :videos, dependent: :destroy
has_many :pdfs, dependent: :destroy
private
def create_resources
sorted_resources = (self.pdfs.with_attached_document + self.videos + self.infographics.with_attached_photo).sort_by(&:created_at).reverse
end
end
我想收集我的 Category 模型的所有 pdf、信息图表和视频子项。模型 PDF 和信息图表具有附加到它们的活动存储项目,因此我想在此查询中包含这些项目,这样我就不会提出太多请求。
有谁知道我如何在一个请求中写这个?
非常感谢你的帮助。
解决方案
您可以直接查询与您的类别相关的 ActiveStorage 附件。用一个查询做你想做的事情的一种方法可能是:
def create_resources
sorted_resources = ActiveStorage::Attachment.
where(record_type: class.name, record_id: id).
order(created_at: :desc)
end
这样,您可以使用一个查询将它们全部排序。请注意,您在链中的最后一个方法将使用 ruby 对它们进行排序。相反,通过使用 order 方法,您告诉 ActiveRecord 也将您的结果按顺序排列。
推荐阅读
- php - 致命错误:未捕获的ImagickException:PDFDelegateFailed`系统找不到指定的文件
- postgresql - PostgreSQL:如何查询具有确切行数的所有表
- qgis - 将 QGIS 3.14.16-Pi 项目导出到 Shapefile
- list - scala 是否在链式函数中执行优化?
- java - JUnit @ParametrizedTest 类对象作为值源?
- asp.net-mvc - STRIPE API Payment Intent 支付不完整
- python - 如何在 Django 的另一个类模型中导入值?
- reactjs - immer 属性更改不会触发功能组件中的更新
- java - JLabel 没有显示任何内容
- tensorflow - 将主数据目录拆分为训练/验证/测试集