升级至Rails 7后出现NameError:关联模型类缺失问题
解决Rails 7.1升级后belongs_to关联的NameError问题
问题根源很明确:你在ExpirationDate模型里写了belongs_to :banana_shacks(复数),Rails 7.1会严格按照关联名的驼峰形式推断类名——复数的:banana_shacks会被转成BananaShacks,但你实际的模型类是单数的BananaShack,自然找不到对应类。
Rails 5.1版本对这种不规范的关联命名有容错,会自动把belongs_to的复数参数转成单数类名,但7.1版本收紧了命名规则,不再做这种兼容。
修复方案
直接把ExpirationDate里的关联改成单数形式,符合Rails的命名约定:
# ExpirationDate模型修正后 class ExpirationDate < ApplicationRecord belongs_to :banana_shack # 替换原来的 :banana_shacks end
如果你的数据库外键字段是banana_shacks_id(不符合Rails规范但已存在无法修改),需要额外指定外键:
belongs_to :banana_shack, foreign_key: 'banana_shacks_id'
BananaShack模型的has_many :expiration_dates不需要修改,它的命名是符合规范的(复数关联对应单数模型的has_many)。
测试一下,现在执行object.update(variable: true)应该不会再触发NameError了。
内容的提问来源于stack exchange,提问作者daveasdf_2
相关产品推荐
相关产品推荐

