Rails: 如何预先加载属于关联模型的附件?
Rails: How to eager load attachments belonging to an associated model?
在我的 Rails v5.2.4.1 应用程序 (ruby v2.6.1) 中,我正在使用工作查询加载一堆消息。每条消息 belongs_to
一个 :user
模型和用户 has_one_attached :photo
。我很想为用户加载这样的所有消息:
Message.<query>.includes(:user)
现在,此代码 photo.attached? ? photo : 'default_avatar.png'
会产生如下查询:
SELECT "active_storage_attachments".* FROM "active_storage_attachments" WHERE "active_storage_attachments"."record_id" = AND "active_storage_attachments"."record_type" = AND "active_storage_attachments"."name" = LIMIT [["record_id", 32], ["record_type", "User"], ["name", "photo"], ["LIMIT", 1]]
如何使用我的查询预先加载 user.photo
和 user.photo.attached?
?
经过一番研究,我找到了这个问题的答案。我在 the docs 中忽略了它。通过在包含中使用 <association>_attachment
解决了该问题。所以在我的问题中,预加载(photo
)是使用以下代码完成的
Message.<query>.includes(user: :photo_attachment)
在我的 Rails v5.2.4.1 应用程序 (ruby v2.6.1) 中,我正在使用工作查询加载一堆消息。每条消息 belongs_to
一个 :user
模型和用户 has_one_attached :photo
。我很想为用户加载这样的所有消息:
Message.<query>.includes(:user)
现在,此代码 photo.attached? ? photo : 'default_avatar.png'
会产生如下查询:
SELECT "active_storage_attachments".* FROM "active_storage_attachments" WHERE "active_storage_attachments"."record_id" = AND "active_storage_attachments"."record_type" = AND "active_storage_attachments"."name" = LIMIT [["record_id", 32], ["record_type", "User"], ["name", "photo"], ["LIMIT", 1]]
如何使用我的查询预先加载 user.photo
和 user.photo.attached?
?
经过一番研究,我找到了这个问题的答案。我在 the docs 中忽略了它。通过在包含中使用 <association>_attachment
解决了该问题。所以在我的问题中,预加载(photo
)是使用以下代码完成的
Message.<query>.includes(user: :photo_attachment)