Уровень стека слишком глубокий при использовании активного хранилища has_one_attached: picture - PullRequest
0 голосов
/ 26 января 2019

Я пытаюсь реализовать Active Storage для проекта Ruby on Rails API.Я поместил has_one_attached: изображение в соответствии с документацией.И удалось загрузить изображение на сервисы AWS S3.Теперь, когда я пытаюсь получить доступ к данным добровольца, он говорит

ActiveStorage::Attachment Load (0.6ms)  SELECT  "active_storage_attachments".* FROM "active_storage_attachments" WHERE

"active_storage_attachments". "Record_id" = $ 1 И "active_storage_attachments". "Record_type" = $ 2 AND "active_storage_attachments". "Name" =$ 3 LIMIT $ 4 [["record_id", 8695], ["record_type", "Volunteer"], ["name", "picture"], ["LIMIT", 1]] ActiveStorage :: Blob Load (0,4 мс) SELECT"active_storage_blobs". * FROM "active_storage_blobs" WHERE "active_storage_blobs". "id" = $ 1 LIMIT $ 2 [["id", 5], ["LIMIT", 1]] [active_model_serializers] отображается с ActiveModel :: Serializer :: Null сActiveStorage :: Attached :: One (58,41 мс) Выполнено 500 Внутренняя ошибка сервера в 322 мс (ActiveRecord: 48,8 мс)

SystemStackError (stack level too deep):

Я проверил данные через консоль rails, и изображение было сохранено ватрибут изображения.Схема для добровольца ниже

Схема

create_table "volunteers", force: :cascade do |t|
    t.string "first_name"
    t.string "last_name"
    t.string "full_name"
    t.string "mobile"
    t.string "picture"
    t.boolean "kit"
    t.boolean "training"
    t.boolean "car"
    t.boolean "test"
    t.bigint "team_id"
    t.bigint "education_id"
    t.datetime "created_at", null: false
    t.datetime "updated_at", null: false
    t.jsonb "attendance", default: []

  end

И когда я комментирую

has_one_attached :picture

в моей модели добровольца, она работает и возвращает меняобъект json без каких-либо ошибок.

Как мне решить слишком глубокую ошибку Stack Level?

1 Ответ

0 голосов
/ 27 января 2019

Обновленный ответ:

Основной причиной этой проблемы в моем случае было наличие в моей модели поля с тем же именем (столбец в таблице)в качестве вложения, которое не нужно, так как Active Storage использует отдельные таблицы.И когда to_json вызывается для такого объекта модели, это вызывает слишком глубокую ошибку уровня стека.После удаления столбца из базы данных проблема исчезнет.

Я вижу, что у вас такая же ситуация в вашей модели, поэтому я бы посоветовал вам удалить столбец picture из таблицы volunteers

Оригинальный ответ:

Я только что столкнулся с той же проблемой.На данный момент, я решил это, исключив вложение из поколения JSON.В вашем случае это будет что-то вроде

@volunteer.to_json(except: :picture)

или использование респондентов

respond_with @volunteer, except: :picture

или

format.json { render json: @volunteer, except: :picture }
...