【发布时间】:2011-12-01 21:24:07
【问题描述】:
我在一个项目中使用 Rails 3.1,bundler 添加了很多我不太了解的 gem。
由于某种原因在开发模式下(可能是因为它不断卸载类),我间歇性地遇到 ActiveRecord::AssociationTypeMismatch。看起来像这样:
Character(#31360520) expected, got Character(#23815500)
我相信其中一个 gem 定义了一个类“Character”,它与我的 ActiveRecord“Character”模型相冲突。我在搜索这个问题的根源时遇到了麻烦,因为它提供了一堆通用结果,而且我不确定 Ruby 社区对这些数字的称呼是什么(类 ID?)。
有几个问题我很乐意帮助您:
- 类名后面括号中的数字是多少?
- 如何根据异常中报告的 id 查找该类的来源(在哪个 gem 中)?
- 对于通常命名的 ActiveRecord 模型,这里的最佳实践是什么?我应该为我的模型命名空间,还是更多地归咎于 gem 的作者?
【问题讨论】:
-
要快速测试其中一个 gem 中是否定义了另一个
Character类,请将您的重命名为MyCharacter并查看Character是否仍然可用。 -
在这种情况下整个应用程序肯定无法加载,不是吗?
-
是的,我尝试用 MyCharacter 替换 Character,但在控制台中找不到 Character。不过它可能仍然是一个命名空间类。
标签: ruby-on-rails ruby-on-rails-3 activerecord bundler