ActiveStorage "идентификатор делегирован во вложении, но вложение равно нулю" - PullRequest
0 голосов
/ 05 ноября 2019

Я в процессе перехода от использования Paperclip до использования ActiveStorage. Я ознакомился с руководством по миграции, предоставленным здесь .

У меня есть модель Logo и модель School.

A 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 запись, которая имеет School record_type и record_id моего School объекта. Он должен искать в этой таблице тип Logo и id моего Logo объекта.

В моей БД у меня есть запись Logo, и идентификатор этой записи отображаетсяв столбец record_id таблицы ACTIVE_STORAGE_ATTACHMENTS, и эта запись имеет blob_id, который сопоставляется столбцу id в таблице ACTIVE_STORAGE_BLOBS и содержит информацию для правильного изображения.

Таким образом, кажется, что все данные правильны.

Кто-нибудь знает, почему выполняемый базовый запрос SQL ищет неправильные type и id, что приводит к ошибке id delegated to attachment, but attachment is nil?

1 Ответ

0 голосов
/ 05 ноября 2019

На основании длинного чата ответ заключается в том, что ваша устаревшая структура модели (School + Logo) не параллельна структуре модели, принятой в руководстве по миграции (только User). Следовательно, вы не можете просто скопировать и вставить скрипт, как указано, и ожидать его успешного выполнения.

Для успешного перехода на ActiveStorage вам потребуется изменить сценарий, предоставленный в руководстве по миграции, чтобы он соответствовал вашемуКонкретная структура модели.

...