STI和未初始化的常数 - 机器固定后

时间:2014-01-27 01:27:12

标签: ruby ruby-on-rails-3

好的,这真的很奇怪......

我的Macbook破了。 Apple修复了它。新的逻辑板。现在我的Rails应用程序将无法在此计算机上正常运行。当我从商店拿回来的时候,我从git中取出了最新版本,进行了迁移(没有任何),然后foreman start(仅尝试了rails s)。现在在一组特定的路线上(对于某个资源丰富的控制器),我得到了这个:

  

NameError异常:未初始化的常量Foo :: Bar

其中Bar是使用单表继承的Foo的子类。我的模型都没有命名空间。我的models文件夹没有子文件夹。

class Foo < ActiveRecord::Base
  ...
end

class Bar < Foo
  ...
end

这些模型并不新鲜。在我的Mac修复之前,它已经很好地工作了很长时间。在Heroku的生产过程中,这个确切的代码运行时没有错误。它在我的备份开发机器上运行良好。我仔细检查了所有环境都在相同版本的Rails和Ruby上。

我很神秘。不知道它会是什么???

1 个答案:

答案 0 :(得分:0)

我在备份开发盒上工作时出错了。我的意思是它有效,然后它没有。这部分实际上有点模糊。

解决方案是更改父(Foo)类:

scope :some_scope, chain_of.other.scopes

对此:

scope :some_scope, -> { chain_of.other.scopes }

实际上,范围链中的最后一个引用了子类(Bar),就像这样 - 这是发生错误的地方:

Bar.inheritance_column

除了这个之外,我还有一个范围在同一个类中,它连接其他范围而不是在lambda中。我仍然对此感到困惑。我只是通过反复试验才解决它......小步走向后,直到我找到了幸福的地方。