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

时间:2012-01-31 16:07:49

标签: ruby-on-rails activerecord

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

  预期

ActiveRecord :: AssociationTypeMismatch字符(#2194222580),   有角色(#2185863000)

如果我们在config.cache_classes = true中转development.rb,问题似乎就会消失,但这样开发是不现实的,因为我们必须不断重启我们的服务器。

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

2 个答案:

答案 0 :(得分:1)

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

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

所以我的建议是确保你没有重新定义你的Character类已知的任何常量(或者你的Character类所知的类等等)。

答案 1 :(得分:0)

过去我发现重新打开(猴子修补)一个ActiveRecord模型实际上会从上到下重新加载整个类。尝试在代码库中搜索class Character

的多个实例