我正在尝试为Ruby on Rails API项目实现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” = $ 1并且 “ active_storage_attachments”。“ record_type” = $ 2并且 “ active_storage_attachments”。“名称” = $ 3 LIMIT $ 4 [[“” record_id“, 8695],[“ record_type”,“ Volunteer”],[“ name”,“ picture”],[“ LIMIT”, 1]] ActiveStorage :: Blob加载(0.4ms)从“ active_storage_blobs”中选择“ active_storage_blobs”。 “ active_storage_blobs”。“ id” = $ 1 LIMIT $ 2 [[“ id”,5],[“ LIMIT”,1]] [active_model_serializers]呈现的ActiveModel :: Serializer :: Null与ActiveStorage :: Attached :: One(58.41ms) 在322毫秒内完成500个内部服务器错误(ActiveRecord:48.8毫秒)
SystemStackError (stack level too deep):
我已经通过Rails控制台检查了数据,并且图像保存在picture属性中。志愿者的架构如下
架构
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对象,而没有任何错误。
我该如何解决堆栈级别太深的错误?
答案 0 :(得分:2)
更新后的答案:
在我的情况下,此问题的根本原因是模型中的字段具有相同的名称(表中的列)与附件相同,这是不需要的,因为Active Storage使用单独的表。而当to_json
在这样的模型对象上调用,会导致堆栈级别过深的错误。
从数据库中删除该列后,问题就消失了。
我看到您的模型也遇到同样的情况,所以我建议您从表picture
中删除列volunteers
原始答案:
我只是遇到了同样的问题。现在,我通过省略json生成的附件解决了它。 就您而言,就像
@volunteer.to_json(except: :picture)
或使用响应者
respond_with @volunteer, except: :picture
或
format.json { render json: @volunteer, except: :picture }