使用活动存储 has_one_attached 时堆栈级别太深:图片

Stack Level too deep when using active storage has_one_attached :picture

我正尝试在 Rails API 项目上为 Ruby 实施 Active Storage。我根据文档放置了 has_one_attached :picture 。并在 AWS S3 服务上成功上传图片。现在,当我尝试访问志愿者数据时,它显示

ActiveStorage::Attachment Load (0.6ms)  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", 8695], ["record_type", "Volunteer"], ["name", "picture"], ["LIMIT", 1]] ActiveStorage::Blob Load (0.4ms) SELECT "active_storage_blobs".* FROM "active_storage_blobs" WHERE "active_storage_blobs"."id" = LIMIT [["id", 5], ["LIMIT", 1]] [active_model_serializers] Rendered ActiveModel::Serializer::Null with ActiveStorage::Attached::One (58.41ms) Completed 500 Internal Server Error in 322ms (ActiveRecord: 48.8ms)

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

在我的志愿者模型中,它工作正常,returns 我 json 对象没有任何错误。

Stack Level too deep 错误应该如何解决?

更新答案:

在我的案例中,这个问题的根本原因是在我的模型(table 中的列)中有一个同名的字段 作为附件,它不需要,因为 Active Storage 使用单独的 tables。而当 to_json 在这样的模型对象上调用,它会导致 Stack level too deep 错误。 从数据库中删除该列后,问题就消失了。

我看到你的模型中有同样的情况,所以我建议你从 table volunteers

中删除列 picture

原答案:

我刚刚 运行 遇到了同样的问题。现在,我通过省略 json 代的附件来解决它。 在您的情况下,它类似于

@volunteer.to_json(except: :picture)

或使用回复者

respond_with @volunteer, except: :picture

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