昨天我发布了一个奇怪的自动加载问题:https://stackoverflow.com/posts/comments/83451042?noredirect=1
似乎我找到了这背后的原因,我的实际代码看起来像:\
a.rb
require_relative './b/b.rb'
module A
def self.abc content
return A::B.new
end
end
B没有任何幻想:
b.rb
module A
class B
def initialize
end
end
class C < B
def initialize
super
end
end
end
当我启动应用程序时,我可以在控制台中运行A::C
并找到该类。在我reload!
之后,A::C
会给出uninitialized constant
。当我然后拨打A::B
并在A::C
后不久再次呼叫。
所以我想我不能让C级和B一样驻留在同一个“文件”中。由于C与B密切相关,我认为将这个可比较的代码放在一起是有意义的。我在这里错误思考,还是应该将其重组为不同的东西?
在正常的Rails之外使用类的新手。感谢。
答案 0 :(得分:1)
当我启动应用程序时,我可以在控制台中运行A :: C并找到 类。在我重新加载!之后,A :: C给出了一个未初始化的常量。当我 然后调用A :: B并在A :: C之后不久再次工作。
因为rails console
并不总是与reload!
相同。您可以通过在cache_classes
中将true
配置为environments/development.rb
来对此进行测试。您将不再收到错误。
但应遵循Rails的命名约定,不再配置,甚至require_relative
。
最终结构:
lib
-- my_lib
---- a
------ b.rb
------ c.rb
---- a.rb
不要忘记将您的lib my_lib
添加到autoload_paths
!