Rails模型关联报错:can't write unknown attribute `category_id`
解决ActiveModel::MissingAttributeError: can't write unknown attribute
category_id的问题 核心问题很明确:你的tasks数据库表实际不存在category_id字段,虽然你写了添加字段的迁移,但大概率没执行,或者执行后没刷新模型缓存。
排查与解决步骤:
检查迁移执行状态
运行命令:rails db:migrate:status找到
AddCategoryIdtoTask这条迁移,如果状态是down,说明它根本没被执行。执行以下命令运行迁移:rails db:migrate重启Rails环境
如果你已经执行过迁移,但还是报错,大概率是Rails缓存了旧的模型结构。关闭当前的rails控制台、服务器,重新启动后再测试category.tasks << task1。直接验证数据库字段
用数据库客户端(比如MySQL Workbench、pgAdmin)连接你的开发数据库,查看tasks表的结构,确认是否存在category_id字段。如果没有,手动执行迁移或者检查迁移文件是否有语法错误。
补充说明
你写的模型关联代码是正确的:Category has_many :tasks和Task belongs_to :category, optional: true的配置没问题,Rails确实会在执行category.tasks << task1时自动给task设置category_id并保存,但这一切的前提是数据库里真的有这个字段。
内容的提问来源于stack exchange,提问作者Simplylmk
相关产品推荐
相关产品推荐

