问题描述
通过 API PATCH 记录的 link 字段时,如果只传 { id: "recXxx" } 不带 title,该 link 字段的 title 会丢失。后续 GET 请求也无法获取到 title,直到 Redis 缓存被清除。
复现步骤
- POST 创建记录,link 字段传
{ id: "recXxx" }
curl -X POST .../api/table/{tableId}/record \
-d '{"fieldKeyType":"dbFieldName","records":[{"fields":{"my_link":{"id":"recTargetId"}}}]}'
响应正常返回 title:
{ "my_link": { "id": "recTargetId", "title": "目标记录标题" } }
- PATCH 同一条记录的同一个 link 字段,传相同的
{ id }
curl -X PATCH .../api/table/{tableId}/record/{recordId} \
-d '{"fieldKeyType":"dbFieldName","record":{"fields":{"my_link":{"id":"recTargetId"}}}}'
响应中 title 丢失:
{ "my_link": { "id": "recTargetId" } }
- GET 读取该记录,title 同样缺失:
{ "my_link": { "id": "recTargetId" } }
- 执行
redis-cli FLUSHALL 清除缓存后,GET 读取恢复正常:
{ "my_link": { "id": "recTargetId", "title": "目标记录标题" } }
预期行为
PATCH link 字段后,title 应从目标表的主字段实时解析并正确返回。PATCH 响应和后续 GET 请求都应包含 title。
实际行为
PATCH 响应中 link 缺少 title,且该结果被 Redis 缓存,导致后续 GET 也获取不到 title。
Workaround
PATCH 时手动带上 title:{ id: "recTargetId", "title": "目标记录标题" },可以避免 title 丢失。
环境
- Teable: latest (Docker)
- 存储: PostgreSQL
- 缓存: Redis
问题描述
通过 API PATCH 记录的 link 字段时,如果只传
{ id: "recXxx" }不带 title,该 link 字段的 title 会丢失。后续 GET 请求也无法获取到 title,直到 Redis 缓存被清除。复现步骤
{ id: "recXxx" }curl -X POST .../api/table/{tableId}/record \ -d '{"fieldKeyType":"dbFieldName","records":[{"fields":{"my_link":{"id":"recTargetId"}}}]}'响应正常返回 title:
{ "my_link": { "id": "recTargetId", "title": "目标记录标题" } }{ id }curl -X PATCH .../api/table/{tableId}/record/{recordId} \ -d '{"fieldKeyType":"dbFieldName","record":{"fields":{"my_link":{"id":"recTargetId"}}}}'响应中 title 丢失:
{ "my_link": { "id": "recTargetId" } }{ "my_link": { "id": "recTargetId" } }redis-cli FLUSHALL清除缓存后,GET 读取恢复正常:{ "my_link": { "id": "recTargetId", "title": "目标记录标题" } }预期行为
PATCH link 字段后,title 应从目标表的主字段实时解析并正确返回。PATCH 响应和后续 GET 请求都应包含 title。
实际行为
PATCH 响应中 link 缺少 title,且该结果被 Redis 缓存,导致后续 GET 也获取不到 title。
Workaround
PATCH 时手动带上 title:
{ id: "recTargetId", "title": "目标记录标题" },可以避免 title 丢失。环境