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

升级Rails 7.1后,jsonb_accessor与enum搭配出现未知属性错误求助

Rails 7.1 结合 jsonb_accessor 使用枚举报错的解决方案

问题根源

Rails 7.1的特定提交调整了枚举属性的加载逻辑,现在枚举会在模型加载初期就校验属性是否存在,但jsonb_accessor定义的虚拟属性是在模型初始化后才生成的,导致枚举加载时找不到gender这个属性,从而触发Unknown enum attribute 'gender' for User错误。

可行解决方案

  • 延迟枚举定义时机
    借助Rails的ActiveSupport.on_load钩子,等ActiveRecord加载完成、jsonb_accessor生成虚拟属性后再定义枚举:

    jsonb_accessor :user_data, gender: :string
    
    ActiveSupport.on_load(:active_record) do
      enum gender: { male: 'male', female: 'female' }
    end
    
  • 手动绑定枚举与jsonb属性
    在枚举定义中直接指定getter和setter,关联到jsonb字段的存取逻辑:

    jsonb_accessor :user_data, gender: :string
    
    enum :gender, { male: 'male', female: 'female' }, 
         getter: ->(value) { user_data['gender'] }, 
         setter: ->(value) { user_data['gender'] = value }
    
  • 升级jsonb_accessor gem
    尝试将jsonb_accessor更新到适配Rails 7.1的最新版本,部分兼容性问题可能已被官方修复:

    bundle update jsonb_accessor
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.08 18:20:57