Rails模型在请求中重新加载,导致AssociationTypeMismatch

apr*_*tor 7 activerecord ruby-on-rails

当我们在开发模式下运行时,我们在Rails 3.1中遇到了问题.似乎我们的模型有时会在请求中重新加载,并且在我们的模型类上设置了新的object_id.然后导致ActiveRecord :: AssociationTypeMismatch

ActiveRecord :: AssociationTypeMismatch字符(#2194222580)预期,得到字符(#2185863000)

如果我们把config.cache_classes = truedevelopment.rb这个问题似乎消失,但它是不现实的发展一样,因为我们必须不断地重新启动我们的服务器.

任何人都知道为什么模型可以在请求中重新加载,或者是否有办法可以强制缓存持续整个请求?

Tom*_*son 1

当 config.cache_classes = false 时,对模型的任何更改都会导致重新加载。这包括定义/重新定义模型中定义/已知的常量。

我们在使用 rspec 和 ActsAsFu 时遇到了这个问题。在测试期间重新定义 Fu 类会导致相关(甚至间接相关)类重新加载,并且我们在相关对象上收到 ActiveRecord::AssociationTypeMismatch 错误。我们认为这是我们的,因为我们的测试单独运行得很好,但在其他测试之后运行时失败了。我们的解决方案是为每个配置创建单独命名的 Fu 类,并避免在测试期间重新分配类名称。

因此,我的建议是确保您没有重新定义您的角色类已知的任何常量(或您的角色类已知的类等)。