1

我正在使用 Ruby v1.9.2 和 Ruby on Rails v3.2.2。我有许多具有常量语句的模型类。例如:

# app/models/class_one.rb
class ClassOne < ActiveRecord::Base
  CONSTANT_ONE = ClassTwo::CONSTANT_TWO
end

# app/models/class_two.rb
class ClassTwo < ActiveRecord::Base
  CONSTANT_TWO = 1
end

当我重新启动服务器时,我收到以下错误:

Routing Error
uninitialized constant ClassTwo::CONSTANT_TWO
Try running rake routes for more information on available routes. 

错误是否与文件(以及类)的加载顺序有关?我应该如何解决问题?

注意:自从 Ruby on Rails 以来,我听说一个“有效”的解决方案可能是在初始化文件(在config/initializers/目录中)中声明常量。如果是这样,应该如何以正确的方式进行?你有什么想法?

4

2 回答 2

0

这两个类是在同一个文件中定义的?哇。重新排序类:

class ClassTwo < ActiveRecord::Base
  CONSTANT_TWO = 1
end

class ClassOne < ActiveRecord::Base
  CONSTANT_ONE = ClassTwo::CONSTANT_TWO
end

应该修复它。CONSTANT_ONE = ClassTwo::CONSTANT_TWO 在解析后立即进行评估。

于 2012-11-08T23:46:07.200 回答
0

正如您开始发现的那样,Rails 中的常量有点痛苦。当您真正深入研究时,痛苦只会增加。在类上使用实际方法比使用常量更容易且更易于维护。例如,在测试中,当涵盖各种用例时,修改方法比修改常量要容易得多。此外,在进行更复杂的编程时,您可能会开始遇到方法不会发生的加载问题(例如多次加载错误或不可用)。我已经完全停止在我的 Rails 应用程序中使用常量,并且一点也没有错过它们。您可能对Advi Grimm 写的具有相同效果的文章感兴趣。

编辑:

如果您真的希望按照您描述的方式使用常量,请查看在 Ruby on Rails 应用程序中定义常量的最佳位置在哪里?了解更多信息。

于 2012-11-09T00:36:58.837 回答