Rails 7.2.2 使用位置参数定义枚举时输入值无效问题求助
Rails枚举改位置参数后数据库枚举值不匹配的修复方案
问题原因
当你将枚举从哈希关键字参数改为数组形式的位置参数后,Rails默认会把数组的**索引值(整数)**作为存储值写入数据库,但你的organization_budget数据库枚举是字符串类型,两者类型不匹配。创建记录时,Rails会把"below_100k"转为对应的索引0,存入数据库时触发枚举值校验,导致错误invalid input value for enum organization_budget: '0'。
修复方法
要保持和现有数据库字符串枚举的兼容,需使用带显式值映射的哈希形式定义枚举,同时符合Rails新的位置参数语法(避免弃用警告):
enum :budget, { below_100k: "below_100k", from_100k_to_250k: "from_100k_to_250k", # 其余枚举值省略 }
这种写法既遵循了Rails推荐的枚举语法,又保持了枚举键与数据库字符串枚举值的一一对应,Rails会直接将指定的字符串值写入数据库,不会再转换为索引整数。
验证
修改完成后,在Rails控制台执行以下命令即可正常创建记录:
Organization.create!(budget: "below_100k", name: "r1") # 或使用符号形式 Organization.create!(budget: :below_100k, name: "r1")
内容的提问来源于stack exchange,提问作者asus
相关产品推荐
相关产品推荐

