You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Active Admin评论保存失败:UUID模型资源查询异常排查

问题原因与修复方案

核心原因

ActiveAdmin 默认生成的评论表(active_admin_comments)中,resource_id 字段类型为 整数,而你的 Bids 模型使用 UUID 作为主键(字符串格式)。两者类型不匹配,导致评论关联资源时无法正确匹配 UUID,最终出现查询 id = nil 并触发事务回滚的问题。

修复步骤

1. 生成/修改 ActiveAdmin 评论表迁移

如果尚未生成评论表迁移,先执行:

rails generate active_admin:comments

打开生成的迁移文件(位于 db/migrate/[timestamp]_create_active_admin_comments.rb),将 resource_id 的类型从 :integer 修改为 :uuid(或 :string,需指定足够长度):

create_table :active_admin_comments do |t|
  t.string :namespace
  t.text   :body
  t.string :resource_type
  # 替换原有的 t.integer :resource_id
  t.uuid :resource_id, null: false
  t.references :author, polymorphic: true
  t.timestamps
end

add_index :active_admin_comments, [:namespace, :resource_type, :resource_id]
add_index :active_admin_comments, [:author_type, :author_id]

如果选择用字符串类型,可改为:

t.string :resource_id, limit: 36, null: false

2. 执行迁移

rails db:migrate

3. 确保模型主键配置正确

在 Bid 模型中明确主键类型(虽然后台迁移已配置,但显式声明可避免潜在问题):

class Bid < ApplicationRecord
  self.primary_key = :id
  belongs_to :vendor, type: :uuid
  belongs_to :job, type: :uuid
end

4. 重启 Rails 服务器

修改迁移和模型后,重启服务器使配置生效:

rails server

可选:更新 ActiveAdmin 版本

如果使用的 ActiveAdmin 版本较旧,可能存在对 Rails 7.1.0 或 UUID 支持不足的问题,可更新到最新稳定版:

bundle update activeadmin

验证

重新尝试在 ActiveAdmin 中给 Bid 资源添加评论,此时评论应能正确关联到 UUID 类型的 Bid 记录,不会再出现 id = nil 的查询错误和事务回滚。

内容的提问来源于stack exchange,提问作者Ben West

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.02 19:03:12