gpt4 book ai didi

ruby-on-rails - 只加载关联对象的一部分

转载 作者:数据小太阳 更新时间:2023-10-29 08:57:09 26 4
gpt4 key购买 nike

我的 ProjectRequestsArchive 有一个类 RequestAttachment

class ProjectRequestsArchive < ApplicationRecord
has_one :request_attachment,
foreign_key: "request_id",
primary_key: "request_id",
required: true
end


class RequestAttachment < ApplicationRecord
belongs_to :project_requests_archive,
foreign_key: :request_id,
primary_key: :request_id
end

RequestAttachment 包含 BLOB 属性。

所以当我调用 ProjectRequestsArchive.find(1054).request_attachment 时,它生成的 SQL 看起来像

 RequestAttachment Load (24.7ms)  SELECT  `request_attachments`.* 
FROM `request_attachments`
WHERE `request_id` = 634 LIMIT 1

注意:这个操作花了大约 10 秒,但我在 request_id 上设置了索引,所以现在它最多需要 1 秒,这也太可怕了。

问题:

我的问题是,我可以只加载请求的 ID,而不加载整个 BLOB 吗?我不需要将它加载到内存中,我只想加载 ID

正如我在上面看到的 SQL 输出,有 select request_attachments.*

当我使用 ProjectRequestsArchive.find(1054).request_attachment.id 时,它还会创建 SQL:select *

我想要获取仅选择 ID 的 SQL 查询:SELECT id from request_attachmens。有什么办法吗?我无法通过某种延迟加载或类似的方式解决它。

编辑:

我忘了说,ProjectRequestArchive.request_id 映射到 RequestAttachmet.request_id

RequestAttachment.idRequestAttachment.request_id 不同。我需要提取 ID

最佳答案

如果你想让sql在你的数据库中选择特定的列,你可以使用select(*fields)

像这样使用它:

Model.select("id, col1, col2").find() // and so on

现在查询日志应该是这样的:

SELECT id, col1, col2 FROM "models" ...

希望这对您有所帮助!

关于ruby-on-rails - 只加载关联对象的一部分,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49687310/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com