ActiveStorage“ id委托给附件,但附件为零”

时间:2019-11-05 14:13:18

标签: ruby-on-rails paperclip rails-activestorage

我正在从使用Paperclip迁移到现在使用ActiveStorage的过程中。 我已经遍历了here提供的迁移指南。

我有一个Logo模型和一个School模型。

一个School has_one_attached :logo和一个Logo belongs_to :school

在控制台中,

school = School.find(119)
school.logo.id

# returns this error :: 
Module::DelegationError Exception: id delegated to attachment, but attachment is nil

运行的基础查询如下(这是问题)

SELECT  "active_storage_attachments".* FROM "active_storage_attachments" WHERE "active_storage_attachments"."record_id" = $1 AND "active_storage_attachments"."record_type" = $2 AND "active_storage_attachments"."name" = $3 LIMIT $4  [["record_id", 119], ["record_type", "School"], ["name", "logo"], ["LIMIT", 1]]

我不明白查询为什么要在ACTIVE_STORAGE_ATTACHMENTS表中搜索包含Schoolrecord_type中的record_id的记录宾语。应该在该表中搜索School类型和我的Logo对象的id

在我的数据库中,我确实有一个Logo记录,并且该记录的ID被映射到Logo表的record_id列,并且该记录有一个{{1} }映射到ACTIVE_STORAGE_ATTACHMENTS表上的blob_id列,其中包含正确图像的信息。

因此,似乎所有数据都正确。

有人知道为什么正在执行的基础SQL查询正在寻找错误的idACTIVE_STORAGE_BLOBS,从而导致type错误吗?

1 个答案:

答案 0 :(得分:0)

基于长时间的聊天,答案是您的旧模型结构(School + Logo)与迁移指南中假定的模型结构(仅User)不平行。因此,您不能简单地按所提供的那样复制并粘贴脚本并期望其成功运行。

要成功迁移到ActiveStorage,您将需要修改迁移指南中提供的脚本以适合您的特定模型结构。